如何使用我自己选择的数据透视表快速排序(一步一步)



我有数据(3是枢轴):

281374

我从左和右移动两个指针

首先我有2和4,所以我不交换

然后我有8和7,所以我交换并有:

273184

现在我有品脱在3和1,所以我交换:

271384

现在左指针=右指针-1,所以我应该快速排序这些:

271 | 384

分开吧?

但如果我这样做,我会得到这样的东西:

127 | 348

这不是排序数据!

我做错了什么?

问题是:

然后我有8和7,所以我交换并有:

273184

您不能交换这些值。从左边起大于枢轴的所有东西都必须放在右边,从右边起低于枢轴的所有都必须放左边。但是7和8都比枢轴元件大。

看到人们在快速排序算法中跳舞:http://www.youtube.com/watch?v=ywWBy6J5gz8

HTH

QuickSort不能以这种方式工作

如果3是你的支点:

交换你的枢轴(3),与末端

281374 -> 281473
281473
-

2比3小吗?是的,但它已经在左边了,所以别管它了

281473
 - 

8比3小吗?不,所以我们需要找出下一个正确的放置位置。在列表和第一项<=我们交换的枢轴(可以是枢轴本身)。在这种情况下,它是一个1所以…

281473 -> 218473

现在我们在

218473
  -

重复til排序。

如果左大于右,则不会交换相应的数字,而是根据它们与枢轴值的比较情况进行交换7已经大于枢轴值,因此它已经位于枢轴的正确(右侧)。

然而,就地分区的标准算法与您尝试的算法大不相同。看看维基百科上的文章,了解一下"就地快速排序"。

3是枢轴,然后检查2:2是否小于3,因此不执行任何操作8大于枢轴,因此它移动到数组的末尾1小于3:什么都不做并且其他元素大于3并且处于正确位置现在我们有:213748现在,我们将这个数组拆分为两个子数组,并获取它们的第一个元素pivot,并使用快速排序对它们进行排序123748123478臀部欢呼我们对其进行排序

最新更新