#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每次都是固定的。