![]() |
1
2
数组上最坏情况下的快速排序是O(n^2),例如,每一级递归只会将最大分区的大小减少1或2(如果两个分区中都不包括pivot,则为2)。
它的速度要快得多,尤其是自底向上的合并排序,它消除了扫描列表以分割列表的过程。相反,它使用一个小型(26到32)的内部指针数组或节点引用(或小型列表数组),将节点合并到数组中,然后合并数组以创建排序列表。Wiki文章包括伪代码: https://en.wikipedia.org/wiki/Merge_sort#Bottom-up_implementation_using_lists |
![]() |
2
1
快速排序工作 平均而言 在O(N log(N))中,但最坏的情况是O(N^2)。现在,当随机选择轴并在大集合上执行算法时,实际上,在实践中得到的是O(N log(N))。然而,如果您选择了一个预定义的轴心,那么,根据数据的模式,您很容易遇到最坏的情况。 认为源数据是 不 随机性,它来自于某种来源,并表现出某种模式。 以防万一 已经按相反顺序排序了-那么你肯定会得到O(N^2)的退化情况。 关于您的问题,为什么快速排序通常不用于链接列表。原因(IMHO)是,对于列表,合并排序是首选方式。它保证了O(N log(N))的最坏情况性能。它通常不用于数组,因为对于数组,它需要分配额外的内存,但对于链表,情况并非如此。 |
![]() |
data-oil · 在字符串列表中搜索的高效快捷方法 6 年前 |
![]() |
Monk · 为什么大Oh不总是算法的最坏情况分析? 6 年前 |
![]() |
Qasim Idrees · 三个嵌套相关循环的算法时间复杂度分析 6 年前 |
![]() |
sdweldon · O(n)vs O(nlogn)时间复杂度 6 年前 |
![]() |
Dazcii · 如何找到3个嵌套循环的复杂性 6 年前 |
![]() |
Kodean · Java:循环字符串长度时间复杂性 6 年前 |
![]() |
Hal · 循环的时间复杂度是多少? 6 年前 |
![]() |
J. Doe · 按O(n)排序的列表中的数字平方? 6 年前 |