使用分区技术快速排序

时间:2012-03-27 20:42:16

标签: c++ algorithm

我使用分区技术实现了快速排序。我面临的一个问题是基于我需要更改代码的支点。下面是我对qsort的实现。

#include<iostream>
using namespace std;
void qsort1(int arr[], int p, int q)
{ 
    if(p<q)
    {
        int ppos = p;
        int pivot = arr[ppos];
        int r = p; 
        for(int i=p;i<=q;i++)
        {
            if(arr[i] < pivot)
            {
                r++;
                swap(arr[i],arr[r]);  
            }
        }
        swap(arr[r],arr[ppos]);
        qsort1(arr,p,r-1);
        qsort1(arr,r+1,q);
    }
}
int main()
{
    int arr[]= {9,7,4,1,2,3};
    qsort1(arr,0,5);
    for(int i =0;i<6;i++)
        cout<<arr[i]<<endl;
    return 0;
}

要将枢轴从第一个元素更改为最后一个元素,我需要更改我的r以排除最后一个元素。有人可以建议我使用相同的分区技术更好的实现。顺便说一句,它不是一个家庭作业问题。

1 个答案:

答案 0 :(得分:4)

为什么不直接交换第一个元素w /你想用作枢轴?然后使用第一个元素作为数据透镜的代码就可以了。