是否曾经想过我们在C++ / Java使用的sort()函数或在Python使用的sorted()在内部如何工作?
以下是所有不同编程语言的内置排序算法及其在内部使用的算法的列表。
- C的qsort()– Quicksort
- 最佳情况下的时间复杂度-O(NlogN)
- 平均案件时间复杂度-O(NlogN)
- 最坏情况下的时间复杂度-O(N2)
- 辅助空间-O(log N)
- 稳定-取决于比较器函数的实现
- 自适应-否
- C++的sort()– Introsort(快速排序的混合,堆排序和插入排序)
- 最佳情况下的时间复杂度-O(NlogN)
- 平均案件时间复杂度-O(NlogN)
- 最坏情况下的时间复杂度-O(NlogN)
- 辅助空间-O(logN)
- 稳定-否
- 自适应-否
- C++的stable_sort()– Mergesort
- 最佳情况下的时间复杂度-O(NlogN)
- 平均案件时间复杂度-O(NlogN)
- 最坏情况下的时间复杂度-O(NlogN)
- 辅助空间-O(N)
- 稳定-是
- 自适应-是
- Java 6的Arrays.sort()– Quicksort
- 最佳情况下的时间复杂度-O(NlogN)
- 平均案件时间复杂度-O(NlogN)
- 最坏情况下的时间复杂度-O(N 2 )
- 辅助空间-O(logN)
- 稳定取决于
- 自适应-否
- Java 7的Arrays.sort()– Timsort(合并排序和插入排序的混合)
- 最佳情况下的时间复杂度-O(N)
- 平均案件时间复杂度-O(NlogN)
- 最坏情况下的时间复杂度-O(NlogN)
- 辅助空间-O(N)
- 稳定-是
- 自适应-是
- Java的Collections.sort()– Mergesort
- 最佳情况下的时间复杂度-O(NlogN)
- 平均案件时间复杂度-O(NlogN)
- 最坏情况下的时间复杂度-O(NlogN)
- 辅助空间-O(N)
- 稳定-是
- 自适应-是
- Python的sorted()– Timsort(合并合并和插入排序的混合)
- 最佳情况下的时间复杂度-O(N)
- 平均案件时间复杂度-O(NlogN)
- 最坏情况下的时间复杂度-O(NlogN)
- 辅助空间-O(N)
- 稳定-是
- 自适应-是
- Python的sort()– Timsort(合并排序和插入排序的混合)
- 最佳情况下的时间复杂度-O(N)
- 平均案件时间复杂度-O(NlogN)
- 最坏情况下的时间复杂度-O(NlogN)
- 辅助空间-O(N)
- 稳定-是
- 自适应-是
在接下来的几套文章中,我们将实现Introsort(C++的排序武器)和Sleep排序,Gnome排序以及其他非常规的排序算法。