快速排序-quicksort

友链:https://blog.csdn.net/weixin_42060896/article/details/88168462?tdsourcetag=s_pcqq_aiomsg

 找一个基准数p(默认区间内的第一个数为基准数,再不断更新基准数),以p为基准,把区间分为小于p和大于p的两个子区间,然后分别在两个子区间再找一个中间大的基准数,再次分成两个区间.....直到子区间长度为1时停止

void quicksort(int a[],int x,int y)
{
    int p=a[x];
    int l=x,r=y;
    if(l>r)
        return;
    while(l<r)
    {
        while(l<r&&a[r]>=p)//这两个while的顺序不能换,否则会错
            r--;
        while(l<r&&a[l]<=p)
            l++;
    //以上两个while循环执行的目的是把[min,中间大的数]放在左边子区间,把[中间大,max]放在右边子区间
  
        int temp;//不符合分配条件的就交换
        temp=a[l];
        a[l]=a[r];
        a[r]=temp;
    //交换之后的a[l]自然就是区间中间大的数
    }
    //更新基准数p,为下一次排序准备
    int temp;
    temp=p;
    p=a[l];
    a[l]=temp;
    quicksort(a,x,l-1);
    quicksort(a,l+1,y);
    
}
原文地址:https://www.cnblogs.com/-citywall123/p/10516878.html