首页 > 解决方案 > 实施快速排序时无法找出错误

问题描述

我正在编写一个基本的快速排序方法,但我无法找出代码中的错误。程序返回的输入与通过排序功能后相同。虽然我与其他互联网资源交叉检查了我的代码,但我试图自己找出错误,并且分区功能似乎有一些错误,但我'无法弄清楚究竟是什么导致了错误。

下面是我的代码。

#include<iostream>
#include<stdio.h>
#include<vector>

using namespace std;

void swap(int n1, int n2)
{
    int temp = n1;
    n1=n2;
    n2=temp;

}



int Partition(vector<int> &A, int start, int end)
{
        int pivot = A[end];
        int Pindex = start;
        for(int i=start;i<end;i++)
        {
            if(A[i]<=pivot)
            {
                swap(A[i],A[Pindex]);
                Pindex++;
            }
        }
        swap(A[Pindex],A[end]);
        return Pindex;
}

void QuickSort(vector<int> &A, int start, int end)
{
    if(start<end)
    {
        int Pindex = Partition(A,start,end);
      //  printf("Partition Index:%d  \n",Pindex);
        QuickSort(A,start,Pindex-1);
        QuickSort(A,Pindex+1,end);
    }
}





int main()
{
    vector<int>A = {4,6,7,9,3,2,0,5};
    cout<<"Before Sorting\n";
    int length = A.size();
    for(int i=0;i<length;i++)
    {
        printf("%d",A[i]);

    }
    printf("\n");
    QuickSort(A,0,length-1);
    cout<<"After Sorting:\n";
    for(int i=0;i<length;i++)
    {
        printf("%d",A[i]);


    }

    return 0;

}

标签: algorithmsortingquicksort

解决方案


如果你在 Java 中这样编码,你也会遇到同样的问题。根本原因是您在函数中比较的值是按值swap传递给该函数的,与按引用进行比较。参考这个链接:C++: Argument Passing "passed by reference"


推荐阅读