QuickSort算法实现

时间:2016-04-01 11:05:01

标签: algorithm quicksort

我没有得到实施快速排序算法的错误。 以下是代码:

#include <bits/stdc++.h>
using namespace std;

int part(vector<int> &arr,int i,int j)
{

   int pivot=i;
    i++;


        while(i<j)
            {

            while(arr[i]<arr[pivot])
                i++;
            while(arr[j]>arr[pivot])
                j--;

            if(i<j)
                swap(arr[i],arr[j]);           


        }

        swap(arr[j],arr[pivot]);
        return j;


}


void quickSort(vector <int> &arr,int p,int r) {

    if(p<r)
        {


        int t=part(arr,p,r);


        quickSort(arr,p,t-1);  

        quickSort(arr,t+1,r);


    }




    }




int main()
{
    int n;
    cin >> n;

    vector <int> arr(n);
    for(int i = 0; i < (int)n; ++i) {
        cin >> arr[i];
    }

    quickSort(arr,0,arr.size()-1);

    for(int i=0;i<arr.size();i++)
        cout<<arr[i]<<" ";
    cout<<endl;

    return 0;
}

我正在给予输入 7 5 8 1 3 7 9 2

但输出为: 2 1 3 7 5 8 9

任何人都可以指出我哪里出错了。

2 个答案:

答案 0 :(得分:0)

如果我没弄错,

中的条件
if(i<j)
    swap(arr[i],arr[j]);
函数part中的

不正确;它应该检查数组值arr[i]arr[j]的关系,而不是ij,以决定是否要交换数组条目。

答案 1 :(得分:0)

在&#34;部分&#34;即使值已经到位,您也可以在最后进行交换。 只需在交换前检查值:

int part(vector<int> &arr, int i, int j)
{
    int pivot = i;
    i++;
    while (i < j)
    {
        while (arr[i] < arr[pivot])
            i++;
        while (arr[j] > arr[pivot])
            j--;

        if (i < j)
            swap(arr[i], arr[j]);
    }
    if (arr[j] < arr[pivot]) {
        swap(arr[j], arr[pivot]);
    }
    return j;
}