天天看点

快速排序以及输出展示

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