我使用分区技术实现了快速排序。我面临的一个问题是基于我需要更改代码的支点。下面是我对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以排除最后一个元素。有人可以建议我使用相同的分区技术更好的实现。顺便说一句,它不是一个家庭作业问题。
答案 0 :(得分:4)
为什么不直接交换第一个元素w /你想用作枢轴?然后使用第一个元素作为数据透镜的代码就可以了。