#include <iostream>
using namespace std;
int PARTITION ( int *A,int p, int r)
{
int x =A[r];
int i=p-1,a;
for(int j=p;j<r;j++)
{
if(A[j]<=x)
{
i++;
a=A[i];
A[i]=A[j];
A[j]=a;
}
}
a=A[i+1];
A[i+1]=A[r];
A[r]=a;
return i+1;
}
void QUICKSORT(int * A,int p,int r)
{
if(p<r)
{
int q=PARTITION(A,p,r);
QUICKSORT(A,p,q-1);
QUICKSORT(A,q+1,r);
}
}
int main()
{
int A[]={16,32 ,5, 13,9,12,1,2,11,0};
QUICKSORT(A,0,10);
for(int i=0;i<10;i++)
cout<<" "<<A[i];
}
快速排序的i一开始指向p-1,j指向的位置表示在j之前的位置与所选pivot关系已知,在j之后的元素位置未知。
之后j自增,碰到比pivot大的元素不动作。i的作用是i左边的都是比pivot小的,i指向的位置的之前元素必然比pivot小。所以当j遇到比pivot小的元素时,i+1所指向的元素必然比pivot大,此时交换ij位置。