【发布时间】:2011-06-02 13:28:36
【问题描述】:
我发现strand sort 在恒定空间中对单链表进行排序非常有吸引力,因为它比插入排序要快得多。
我明白为什么它在最好的情况下是O(n)(列表已经排序)而在最坏的情况下是O(n^2)(列表是反向排序的)。但是为什么在一般情况下O(n sqrt n)?如果算法不是基于二分法并且具有多项式的最佳情况和最坏情况性能,那么平均情况就是O(n^m),其中m 是最佳情况和最坏情况指数的算术平均值(m = (1 + 2) / 2 = 3/2,@ 987654328@)?
【问题讨论】:
-
看这个问题。我也想知道它是如何'n sqrt(n)'
-
不,平均情况分析通常要复杂得多。 (例如,困难的情况可能很少见或很常见。)
-
Comb Sort 应该能够以 O(n log n) 时间复杂度对常数空间中的单链表进行排序。
-
普通的旧合并排序对链表使用 O(1) 空间(与需要 O(n) 工作空间的数组不同)。当然是 O(n log n)。您还可以在链表上使用快速排序,它需要 O(log n) 堆栈空间并且具有 O(n^2) 最坏情况,但只有 O(n log n) 最佳和平均情况复杂度。
-
@j_random_hacker 感谢您指出合并排序可以使用 O(1) 空间来实现列表。
标签: algorithm sorting complexity-theory time-complexity