我遇到了一个看似相当不错的数组排序算法,但它使用子数组进行递归。我听说制作子数组的时间复杂度为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),但它的平均情况是什么?
另外,请不要更好地联系我,我试图找出一个好的方法。