#include<iostream>
using namespace std;
class quicksort{
public:
int quicks(int *a,int low,int high)
{
int q=a[low];//q
int i=low;
int j=high;
while(i<j)
{
while(q<=a[j]&&i<j)
{
j--;
}
if(i<j)
{
swap(a[i++],a[j]);
}
while(a[i]<=q&&i<j)
{
i++;
}
if(i<j)
{
swap(a[i],a[j--]);}
}
return j;
}
void quicksorts(int *a,int low,int high)
{
if(low<high)
{
int pivote=quicks(a,low,high);
quicksorts(a,low,pivote-1);
quicksorts(a,pivote+1,high);
}
}
};
int main()
{
int arr[]={2,14,32,182,34,605,99,9,7,54,22,6,7};
quicksort qs;
int len=sizeof(arr)/sizeof(int);
qs.quicksorts(arr,0,len-1);
for(int a=0;a<len;a++)
{
cout<<arr[a]<<"_ ";
}
return 0;
}
注意红色部分为易错部分,蓝色部分的++不写也照样对,只不过每轮多比较一次已比过的数。还有q哨兵数一般选哪个都行,指的是一个数组里的数而不是数组下标,这里的返回值i=j,返回的是p哨兵位置(pivote)。当然你也可以让p=下标,不过这样每次交换后也要改变p.而在上式,p每次都是固定的。