快速排序算法理解

快速排序

1.确定基准点(pivot)

这里设置为array[0]

2.设置left=0

right=(sizeog(array)/sizeof(array[0]))-1

保证left<right情况下进行如下操作

3.从右到左依次与pivot进行比较,先从右边开始right递减找到比pivot小的放到array[0]的位置上

4.从左到右依次与pivot进行比较,left递增找到比pivot大的数房子刚才array[right]的位置上

并使right--

5.重复上面步骤,直至left=right

把pivot放在array[left]//也可以是left可以换成right

位置上

此时左边的都比pivot少

右边的知都比pivot大

完成第一次排序

6.再对左右进行一次递归

递归条件看right的数字是否大于1

代码如下

qsort( float A[], int N )



{

    int i=0,j=N-1;//N为数组长度

    float pivot = A[0];

    if(N>1)

    {

        while(i<j)

        {

            while(i<j&&A[j]>pivot)

                j--;

            if(i<j)

                A[i++] = A[j];

            while(i<j&&A[i]<pivot)

                i++;

            if(i<j)

                A[j--] = A[i];

        }

        A[i] = pivot;

        qsort(A,i);

        qsort(A+i+1,N-i-1);

    }

    return A[(N/2)];

}

最后

qsort(A,i);A数组不过排序的数值只有左边i个了,从0到i-1

qsort(A+i+1,N-i-1);A+i+1相当于从A[i+1]的一个内部数组排序,数组长度由原来的N

少了i+1个数,所以是N-i-1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小袁拒绝摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值