实施QuickSort

时间:2018-12-14 17:20:59

标签: algorithm sorting quicksort

我正在编写一个基本的QuickSort方法,但是我无法找出代码中的错误。该程序返回的输入与经过排序功能后的输入相同。尽管我与其他Internet资源进行了交叉检查,但我还是试图自己找出错误,但Partition函数似乎出现了一些错误,但我'无法弄清楚到底是什么引起了错误。

下面是我的代码。

#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;

}

3 个答案:

答案 0 :(得分:1)

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

交换必须按地址引用,并且不是有效值。否则将无法交换这些值。

在调用交换函数时,也按如下所示swap(&A[i] , &A[j])

答案 1 :(得分:1)

如果您使用Java进行这种编码,那么您也会遇到相同的问题。根本原因是,您在swap函数中比较的值被按值传递给了该函数,而与按引用进行了相比。 请参考以下链接:C++: Argument Passing "passed by reference"

答案 2 :(得分:0)

实际上问题是,您在swap(int a,int b)函数中发送了两个整数变量。 这些变量在它们之间交换价值。

但是您有一个包含此integer值的数组。您需要传递数组以交换两个integer基础位置。

您需要通过以下方式调用swap函数:

void swap(vector<int> &A,int Pindex,int end){                                                  
    int temp = A[Pindex]; 
    A[Pindex]= A[end];
    A[end]=temp; 
}