性能
排序法 | 时间复杂度 | 空间复杂度 | 稳定性 |
---|---|---|---|
插入 | O(n^2) | O(1) | 稳定 |
冒泡 | O(n^2) | O(1) | 稳定 |
选择 | O(n^2) | O(1) | 不定 |
随机快排 | O(N*logN) | O(1) | 不稳 |
heap | O(N*logN) | O(N) | 不稳 |
归并 | O(N*logN) | O(N) | 稳定 |
计数 | O(N) | O(M) | 稳定 |
基数 | O(N) | O(N) | 稳定 |
证明
选择排序为什么不稳定?
对于[5,6,5,3],第一次排序后[3,6,5,5],稳定性被破坏。
快排的时间复杂度?
最坏情况是有序数组,如[1,2,3,4,5]这时时间复杂度为O(N^2)。
最好情况是排序后partiton落在中点,T(N)=2T(N/2),由master定理,T(N)=O(NlogN)
使用随机随机快排序可以达到O(N*logN)
堆排序的时间复杂度
将数组调整为堆:由上到下O(N*logN),由下到上O(N)
堆排序:交换堆顶和堆低元素,在向下调整,O(N*logN)
归并排序的空间复杂度
因为每个递归都会销毁本次递归申请的数组,所以最大为O(N)
计数排序的时空复杂度
时间:O(N+M),遍历数组求出范围+遍历范围填充数组
空间:O(M),创建的范围数组