排序 - 是否有可能使用子阵列进行排序?

时间:2015-11-14 15:44:35

标签: java arrays algorithm sorting runtime

我遇到了一个看似相当不错的数组排序算法,但它使用子数组进行递归。我听说制作子数组的时间复杂度为O(n),这或多或少会阻止使用子数组的任何有效排序。

算法:

采取一个支点。为了演示,我们每次都将它称为阵列中的最后一个数字 将枢轴放在正确的位置。在这里,您将看到2和6,如果6更大,则将其放在2.然后看1和2,如果它更小,则将其放在左侧。如果两个数字相等,我选择将枢轴放在左边 取下枢轴左侧和右侧的子阵列,然后重复这些子阵列 当子阵列大小为1时停止。

一个有效的例子:

 6 1 7 8 6 9 1 2        Pivot would be 2
 1 1 2 6 6 7 8 9        Put 2 in it's place, time to take sub-arrays
[1 1] 2 [6 7 8 9]       Recur.
 1 1  2 [6 7 8] 9       Recur more. 
 1 1 2  [6 7] 8 9       Recur.
 1 1 2  6 7 8 9         Done!

时间复杂度是多少?另外,如果采用子阵列只花费O(1)时间,我有兴趣看到时间复杂度。

我认为最坏的情况是这个算法是O(n ^ 2),但它的平均情况是什么?

另外,请不要更好地联系我,我试图找出一个好的方法。

1 个答案:

答案 0 :(得分:1)

您已经描述了Quick Sort算法,其平均时间复杂度为O(n log n),最差情况时间复杂度为O(n^2)(奇怪的是,当数组已经排序时)。