快速排序的枢纽元选取策略

快速排序中枢纽元的选择会影响算法的效率


快速排序中的枢纽元指的是一个元素V,该元素将一个数集S分成两个互斥的集合s1和s2,s1中的任意元素均不大于V,s2中的任意元素均不小于V.

错误的选择策略

     1)没有经过充分考虑,选择将数组的第一个元素作为枢纽元。

     如果输入时随机的,那么这是可以接受的,但是如果输入时预排序的或是反序的,那么这样的枢纽元就产生了一个劣质的分割,即所有的元素不是全被划入s1就是全被划入s2。更有甚者,这种情况可能发生在所有的递归调用中。实际上,如果第一个元素用作枢纽元且输入时预排序的,那么快速排序话费的时间将是二次的,虽然是花费了这么多时间,但是却没有做什么事情,这比较尴尬。

     2)选取输入中前两个互异关键字中的较大者作为枢纽元。 


可选的枢纽元选取策略

     1)随机选取枢纽元。这是一种比较安全的策略

           见剑指offer

     2)三数中值分割法。即随机选取三个元素,并用它们的中值作为枢纽元。一般的做法是使用左端,右端和中间的三个元素的中值作为枢纽元。使用三数中值分割法消除了预排序输入的坏情形

        实际中的策略是:首选对A[left],A[rignt],A[center]进行从小到大排序,经过该操作后,三元素的最大者被放到了A[right],最小者被放到了A[left],A[center]中的元素大小居中,这样就可以作为枢纽元。由于A[

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值