【问题标题】:Find the Pivot for this Partition Question查找此分区问题的枢轴
【发布时间】:2021-07-15 09:09:20
【问题描述】:

好吧,假设我们有一个完成分区的数组,结果是

{3、5、3、9、17、14、24、21、19}

第一个分区步骤的支点是什么?

显然这个问题的答案不止一个,但我只找到一个是 9?还有我想念的吗?如果有人找到其他答案,您能否解释一下您是如何找到的?

【问题讨论】:

  • 前 3 个是另一个可能的支点
  • @MBo 我也这么认为,但我不明白这怎么可能
  • 你的意思是一些特定的分区方案吗?

标签: algorithm sorting quicksort partition


【解决方案1】:

此分区有两个可能的枢轴。

第一个是9在第四个位置,这很明显,因为前三个数字小于9,其余数字大于9。

另一个是3在第一个位置,当它放在数组末尾时,它已经位于分区之前的数组开头,我们找不到任何小于3的数字,因此不执行交换。

尝试使用第一个3作为pivot并执行分区,你会得到相同的结果。假设左边的交换指针寻找一个大于或等于主元的数字,而右边的交换点寻找一个小于主元的数字。

这意味着,对于数组 {3, 5, 3, 9, 17, 14, 24, 21, 19},

3 5 3 9 17 14 24 21 19
19 5 3 9 17 14 24 21 3 #Swap pivot to the end

[19] 5 3 9 17 14 24 21 3 
#Left locks 19 >= 3, right cannot find any number < 3, end of swapping

3 5 3 9 17 14 24 21 19
#Swap pivot back to the position where left and right pointers meet
#End of algorithm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    相关资源
    最近更新 更多