平均时间复杂度 | 最差时间复杂度 | 空间复杂度 | 是否稳定 | 总结 | |
冒泡排序 | O(n^2) | O(n^2) | O(1) | 是 | 最慢的排序算法 |
选择排序 | O(n^2) | O(n^2) | O(1) | 否 | 是一种交换排序算法,实际使用较少 |
插入排序 | O(n^2) | O(n^2) | O(1) | 是 | 比冒泡快2倍,通常在数据量1000如下使用。 |
希尔排序 | O(nlogn)算法 |
O(n^s) 1 <s < 2 |
O(1) | 否 | 比冒泡快5倍,比插入快2倍,比快排、归并、堆等慢。简单,适用于数据量较少(5000)如下而且速度不是很重要的场合。 |
快速排序 | O(nlogn) | O(n^2) | O(1) | 否 | 使用较多,平均速度最快的排序算法。它是递归实现的,须要注意递归栈可能溢出的问题。 |
归并排序 | O(nlogn) | O(n) | 是 | 须要的额外空间较多,主要用于外部排序 | |
堆排序 | O(nlogn) | O(1) | 否 | 适用于数据量很是大的场景,好比超过百万的记录 | |
基数排序 | O(logrd)(d是关键字项数0-9,r是基数,个十百) | O(logrd) | O(n) | 是 | 只能用于整数的排序,使用很少。 |
注意:上面对于算法的时间复杂度只给出了量级,而同一量级的因为其常系数的不一样,其时间复杂度也是有差别的。性能
从平均性能来讲,快速排序最佳,由于所需时间最短(快排和堆排序都是nlogn的量级,可是快排的常系数较堆排序更小一些),spa
但快速排序在最坏状况下的时间性能不如堆排序和归并排序。n较大时,归并排序所需时间较堆排序省,但归并排序须要的辅助存储量更大。排序