我有数据(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臀部欢呼我们对其进行排序