【发布时间】:2015-04-27 21:28:54
【问题描述】:
所以我有这个数组{3,1,4,1,5,9,2,6,5,3,5}
我正在使用三中位数的方法来获取枢轴。
所以在这种情况下,这里的中位数在左、中、右之间:3,9,5。所以是 5
我要做的第一件事是确保枢轴在最左边。
现在我将小于 5 的数字保留在左侧,并将更大的数字移到数组的最右侧。最终结果是:{3,1,4,1,2,3|5|5,9,6,5}
现在对左右子数组进行快速排序。
{3,1,4,1,2,3} 的中位数为 3,重新排列后我得到 {1,1,2,3,4}
{5,9,6,5} 的中位数为 5,我得到 {5,5,9,6} 是向右排序相等和更大的数字的结果。但是这个子数组不像第一个子数组那样排序。它只有在中位数为 6 时才有效。那么它哪里出错了?谢谢。
【问题讨论】:
-
只有当子数组大小为 1 时才完成。不能在任意次数的迭代后停止。
-
所以你的意思是你必须不断地重新排列数字,左边的值较小,右边的值较大,直到子数组大小变为 1?
-
是的,您需要对子数组进行递归排序。
-
最后一件事。在将较小的值放在左侧,将较大的值放在右侧之前,中值/枢轴是否被推到最右边?
-
是的,这是一种常见的做法(尽管它完全等同于将其推到最左边的位置)。以这种方式对阵列进行分区更容易。如果你把它放在子数组的最右边,你可以用 > 或 >=-section 中的第一个元素来切换它以恢复正确的顺序。
标签: algorithm sorting quicksort