在快速排序算法中,分区步骤对于正确排序数组至关重要。给定以下数组:
array = [9, 3, 8, 4, 7, 5, 6, 2]
如果选择主元元素作为最后一个元素(在本例中为
2
),那么在第一个分区步骤之后数组会是什么样子?解释一下分区是如何工作的以及在这一步之后数组应该是什么样子。
我尝试使用选择作为数组最后一个元素的主元元素来实现快速排序算法的分区步骤。我的目标是对数组进行重新排序,使所有小于主元的元素都位于其左侧,所有大于主元的元素位于其右侧。我希望根据这种情况将数组分成两部分,并将枢轴元素放置在第一个分区之后的正确位置。但是,我不确定分区过程后元素是否正确定位。
例如,对于数组
[9, 3, 8, 4, 7, 5, 6, 2]
和枢轴2
,我期望数组在分区后看起来像[2, 3, 8, 4, 7, 5, 6, 9]
,但我需要确认这是否是正确的结果并了解其背后的原因。
想想如何简单地布置你的数字:
[9,3,8,4,7,5,6,2]
我们的主元是列表中的最后一个数字,即 2。这个想法是围绕值 2 进行旋转,将所有 < 2 on its left and absolutely anything >= 3 放在它旁边。
我们的做法如下: 首先从头开始一个一个地查看每个数字:
我们首先比较 9 和 2。由于 9 更大,所以它保持在原来的位置。 接下来是 3,它也比 2 大,所以它保留下来。 我们对 8、4、7、5 和 6 执行相同的操作。所有这些都大于 2,因此它们都保持不变。 现在,我们需要将 2 放在正确的位置:
由于 2 比我们看到的所有值都小,所以它应该放在列表的最开始。所以我们将 2 与 9 交换。 交换后,列表现在如下所示:
[2,3,8,4,7,5,6,9]
现在 2 就到了它所属的地方。没有什么地窖比 2 更小了——因为没有什么比这更小的了!其余的东西仍然是垃圾,但没关系 - 我们将用其他数字重新做一遍。
这是快速排序的第一部分。我们对这些新列表执行此操作,并继续选择枢轴,直到我们最终将所有分区列表按排序顺序排列。