快速排序:
- 最坏时间复杂度O(n^2)
- 平均时间复杂度O(nlogn)
计数排序:
- 在所有情况下时间复杂度都是O(n)
快排和计数排序都是稳定的算法。
如果这两个条件都满足,为什么快速排序仍然比计数排序更好呢?
快速排序:
计数排序:
快排和计数排序都是稳定的算法。
如果这两个条件都满足,为什么快速排序仍然比计数排序更好呢?
并非所有的排序算法都比其他算法更好。在某些情况下,由于以下几个原因,快速排序可能会被优先选择:
与计数排序不同,快速排序是原地排序的,不需要创建多个数组(例如使用更多内存)来完成工作。
看起来计数排序是O(n)的,但请看一下必须创建的中间计数数组。计数数组的长度实际上是原始数组中最大元素和最小元素之间的差异。如果范围非常大,那么这个计数数组就会非常庞大。例如,如果您的数组只有两个元素,但这两个元素是1和9999999?而且这个计数数组必须被处理(所有那个求和和计数的东西)。因此,计数排序的运行时间实际上是O(n+k),其中k是原始数组中最大元素和最小元素之间的差异。
k
可以被视为不同元素的数量,而不是元素的范围,但是不同元素的数量远小于范围的情况很少见(例如具有值为1和9999999的两个不同元素的示例),需要进行映射以将元素值转换为映射索引。 - rcgldr