关于双路快排的疑问

关于双路快排的疑问

# 具体遇到的问题

我感觉双路快排 就 partition2ways方法来说, 无法保证 一定是 “<特定值, =特定值,>特定值”这种形式, 

只是尽量均匀的拆分, 因为 特定值可以排在两边任何一端,swap后 有可能 不能保证 与特定值相等的数 一定在中间。 


取一组数 【4,6,5,2,3,8,7,1】, 标定点取 第一个元素【4】,双路快排后: [2,1,3,4,5,8,7,6]  完全符合;

取一组数 【4,6,5,2,3,8,7,4,1】, 标定点取 第一个元素【4】,双路快排后: [2,1,3,4,5,8,7,4,6]  ,发现倒数第2个


元素 4 并没有排列到中间, 因为 4>=标定点【4】, 所以仍旧会--  并不会停下来。 


但经过 快排之中 sort里的拆分 和 partition2ways 协同合作时,就能正确排出顺序, 这里有点奇怪,partition2ways 明明没有将  =特定值 的元素放在最中间啊。



# 报错信息的截图

# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

在这里输入代码,可通过选择【代码语言】突出显示

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

双路快排没有保证分成三部分。三路快排保证分成三部分。课程后续会讲三路快排。


双路快排依然只是分成两部分,在你的例子中,分成了 < 和 >= 两部分。


2,1,3,4,5,8,7,4,6 中,前三个元素 [2, 1, 3] 是 < 4 的;后五个元素[5, 8, 7, 4, 6] 是 >= 4 的。


双路快排保证的是,当有大量重复元素的时候,最终 pivot 的位置尽量靠中间,从而防止算法的退化。



继续加油!:)



提问者 xiaobai00000 2020-12-24 22:58:20

是不是 因为 最终会拆成 两个数  两两比较的原因呢。归并排序是 拆成最小粒度为2 的 两个数去比, 那么 快排 是不是可以拆最小粒度为3,按照双路的法则 排< = >  

  • 双路快排没有保证分成三部分。三路快排保证分成三部分。课程后续会讲三路快排。


    双路快排依然只是分成两部分,在你的例子中,分成了 < 和 >= 两部分。

    2,1,3,4,5,8,7,4,6 中,前三个元素 [2, 1, 3] 是 < 4 的;后五个元素[5, 8, 7, 4, 6] 是 >= 4 的。


    双路快排保证的是,当有大量重复元素的时候,最终 pivot 的位置尽量靠中间,从而防止算法的退化。


    继续加油!:)

    2020-12-25 07:20:53
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2583    人
  • 解答问题       1082    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师