排序算法特点分析

排序法 平均时间 最差情况 稳定性 额外空间 备注
直接插入 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) 稳定 O(1) 大部分已排序时较好
shell O ( n 1.3 ) O(n^{1.3}) O(n1.3) O ( n 2 ) O(n^2) O(n2) 不稳定 O(1) 时间复杂度计算复杂,网上有多种说法
直接选择 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) 不稳定 O(1) 时间复杂度与初始序列无关
堆排序 O(nlogn) O(nlogn) 不稳定 O(1) 可以快速选出最小(最大)的几个数字;时间复杂度与初始序列无关
冒泡排序 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) 稳定 O(1) n较小时较好
快速排序 O(nlogn) O(nlogn) 不稳定 O(nlogn) 已经完全有序的时候,最费时
基数排序 O(d(r+n) O(d(r+n) 稳定 O(n) d是关键字位数,r是进制
归并排序 O(nlogn) O(nlogn) 稳定 O(n) 外部排序算法,适合n很大很大很大很大,大到内存一次装不下时使用;归并趟数 ⌈ l o g k n ⌉ \lceil log_k n\rceil logkn,k是归并路数,n是初始归并段

辅助记忆:改进后的算法们O(nlogn)比改进前O(n2)的速度更快,但牺牲了稳定性。直接选择排序是最拉胯的排序,最好最坏都是O(n2),还tm的不稳定。只有快速排序、归并排序和基数排序需要额外空间。堆排序虽然是不稳定的排序,但时间上很稳定。

猜你喜欢

转载自blog.csdn.net/weixin_39529891/article/details/106813173
今日推荐