快速排序分区算法。它如何工作

时间:2014-06-26 12:05:17

标签: algorithm data-structures quicksort partitioning

这是一种快速排序分区的算法。

设a = x [lb](lb指下界)是寻找最终位置的元素。 上下两个引用分别初始化为子数组的上限和下限。 在执行过程中的任何时刻,上方位置的每个元素都比a大。

上下两个参考以下列方式相互移动 步骤1:将指针向下重复增加一个位置,直到x [down]> = a

步骤2:将指针向上重复一个位置,直到x [up]<

步骤3:如果向上&gt;然后用x [向上]交换x [向下]。 重复该过程,直到步骤3中的条件失败(即向上= <向下),此时x [up]与x [lb](等于a)互换,其最终位置被寻找并且j(即最终)位置)设置为up。

使用此算法我必须对数组进行分区

25,57,48,37,12,92,86,33  
选择

pivot作为数组中的第一个元素。 因此a = 25。

最初down = 0,up = 7 由于满足条件x [down]&gt; = a,因此不必移动指针 减少4倍后 下降点为0,上升点为4.

然后将x [向下]与x [向上]交换,我得到

12,57,48,37,25,92,86,33

在增加一次并减少4次之后,我得出= 0,向下= 1 然后我必须将x [up]与x [lb]交换 然后我有12,57,48,37,25,92,86,33,其中j = up = 0。

这是对的吗? ?
然后,当应用于快速排序算法时,我必须执行Quicksort(x,1,7)。

那就是我必须对数组57,48,37,25,92,86,33进行分区

选择第一个元素作为轴a = 57。

然后向下= 0,向上= 6。

将x [down]与x [up]交换 我得到33,48,37,25,92,86,57 重复增加向下指针4次,并反复减少ointer 3次,我有33,48,37,25,92,86,57

然后向下= 4,向上= 3. 用x [lb]交换x [up] 我有25,48,37,33,92,86,57 j = up = 3。

但很明显这个没有在57左右正确分区

我看不出自己犯了什么错误。因此,如果有人可以帮助我找出真正有用的错误

1 个答案:

答案 0 :(得分:2)

将x [down]与x [up]交换后,你也必须向下更新。 第3步应修改为: 步骤3:如果向上&gt;然后将x [向下]与x [向上] 向下交换,向下向下与< - >向上交换。重复该过程,直到步骤3中的条件失败(即向上= <向下),此时x [向上]与x [lb](等于a)互换,其最终位置被寻找并且j(即最终)位置)设置为。