int Partition(int *L,int low,int high)
{
int p=L[low]; //枢轴选取第一个即low
while(low<high) //low>=high时说明排序完毕,必须退出
{
//下面的2个while都必须记得加low<high的判断
while(low<high && L[high]>=p) high--; //当枢轴右边值大于枢轴时,则high减小,看下一个值
L[low]=L[high]; //发现一个小的,则换到low处,接着low开始加
while(low<high&&L[low]<=p) low++; //左边小于枢轴,则low++,继续看下一个值
L[high]=L[low]; //发现一个大的,则换到刚才停住的high处,接着开始走high
}
L[low]=p; //low==high时退出到此,那个位置就是枢轴应该呆的位置,故L[low]=p
return low;//返回枢轴位置
}
void Qsort(int *L,int low,int high)
{
int p;
if(low>=high) // 这个必须加!
return ;
p=Partition(L,low,high); //排序并寻找枢轴位置
Qsort(L,low,p-1); //对枢轴左边排序
Qsort(L,p+1,high); //对枢轴右边排序
}
int main()
{
int num[8]={6,8,4,9,3,5,2,7};
Qsort(num,0,7);
for(int i=0;i<=7;i++)
printf("%d ",num[i]);
cout<<endl;
}