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;
}