天天看點

快速排序以及輸出展示

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