排序算法大致可分为两类:
- A. 基于比较的排序算法
- B. 非比较排序算法
比较排序算法有:快排、归并、堆排序、插入排序等
非比较排序算法有:计数排序、桶排序、基数排序等
比较排序算法中
- 快排、归并、堆排序能够达到 $$O(n \cdot \log{n})$$的(平均)时间复杂度
- 而插入排序的(平均)时间复杂度是 $$O(n^2$$
- 但并不是说复杂度高的算法就差,这要看数据规模和数据有序度,例如
- 数据量小,或是有序度高的数据就适合用插入排序
- 同样是数据量大的数据排序,如果数据的有序度高,归并优于快排
- 快排虽然是比较排序中最快的算法,但若是分区选取不好,反而会让排序效率降低
- 工业级的排序都是混合多种排序算法,例如 java 排序的实现就是混合了插入、归并与快排,不同的数据规模、不同场景下切换不同的排序算法
至于计数、桶、基数可以达到进一步让时间复杂度降至$$O(n$$,当然这与被排序数字的位数、范围等都有关系,您想知道的话,咱们可以细聊。