【快速排序】n个元素最少要进行几趟?--王海艳

问题描述:快排在有序或顺序情况下,趟数最多,是n-1次,

但是如果要求最好情况下的最少次数呢?

问题分析:先给出递推式子

规定待排序序列中元素数量 n ≤ 1 时,不需要排序

                则  k(1)=0           k(2)=1   趟

结论:

那么 k(3)= k(1) + k(1) +1 = 1 趟  

k(4)  = k(1)+k(2)+1 = 2 趟

k(5) = k(1) + k(3) +1 = 2 趟   而不是  k(5) = k(2) + k(2) +1 =3 趟

k(6)= k(2)+k(3)+1= 3趟


                                            王海艳书中的伪代码

以序列第一个元素作为基准,令剩余序列的第一个元素是i ,最后一个元素的下一个是 j。

while (i <= j )时{

        i指针 不断地向右移动,直到遇到一个比  基准  大的元素,然后停在此处。

         j指针 不断的向左移动直到遇到一个比  基准  小的元素,然后停在此处。

}      

     把 基准 元素 和 j 指向的元素 交换位置


  •  k(3) = 1 趟的验证 :

初始序列 :   5   3   4

初始位置ij
序列534
第一堂结果35

第一趟过程:

j  向左移动停在4,i向右移动停在4,然后,基准元素 5 和 j 指向的 4 交换位置。

  •  k(5)= 2趟的验证

初始序列 :   3   2   5    4    6 

初始位置ij
序列32546
第一趟结果2546
第二趟结果23456

第一趟过程:i指针向右移动指向5,j向左移动指向2,此时 j < i,退出循环,然后 基准 (3) 与 j 指向的元素(2)交换  ,结果:2 3  5  4  6  

第二趟过程: 3  已经是最终位置,其左边的子序列只有一个元素 2 ,不需要排序,而右边的子序列{ 5  4  6 }开始递归的进行快速排序,过程参照k(3)  ,

                最终 排序结果是   2  3   4  5  6  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值