排序算法总结

 

一、常见问题

1、什么是稳定性?哪些排序算法是稳定排序?

稳定性,大概就是能保证排序前后,两个相等的数在序列中的相对次序不变,即,排序前A在A'前面,排序后A依然在A'前面。

稳定的排序有:冒泡排序(每次比较相邻两个元素,当前者比后者大时交换,当两者相等时不交换)、插入排序(如果已排序部分的当前元素比待插入元素大才右移,相等则不右移)、归并排序(底层基于合并操作,而合并操作不改变相同元素的先后顺序)、

不稳定的排序有:选择排序(5,8,5,2,9经过一轮排序之后,两个5的先后顺序发生了变化)、希尔排序(相同的元素可能被分配到各自的组中进行插入排序,在插入排序中的移动有可能导致其先后顺序发生改变)、快速排序()

 

2、初始排列顺序对算法的影响

算法复杂度与初始状态无关的有:选择排序、堆排序、归并排序、基数排序

元素总比较次数与初始状态无关的有:选择排序、基数排序

元素总移动次数与初始状态无关的有:归并排序、基数排序

 

 

3、小结

算法稳定性时间复杂度(平均、最好、最坏)空间复杂度排序方式备注
冒泡排序O(n^2)   O(n)   O(n^2)O(1)In-place 
选择排序×O(n^2)   O(n^2)   O(n^2)O(1)In-place 
插入排序O(n^2)   O(n)    O(n^2)O(1)In-place时间复杂度和初始顺序有关,因此通常处理一个基本有序的序列
希尔排序×O(nlogn)   O(n(logn)^2)   O(n(logn)^2) O(1)In-place分组进行插入排序(步长+插入排序)
归并排序O(nlogn)   O(nlogn)   O(nlogn)O(n)Out-place 
快速排序×O(nlogn)   O(nlogn)   O(n^2)O(logn)In-place 
三向切分快速排序×N ~ NlogNO(logn) 适用于有大量重复主键
堆排序×O(nlogn)   O(nlogn)   O(nlogn)O(1)In-place无法利用局部性原理
计数排序O(n+k)   O(n+k)   O(n+k)O(k)Out-place 
桶排序O(n+k)   O(n+k)   O(n^2)O(n+k)Out-place 
基数排序O(n*k)   O(n*k)   O(n*k)O(n+k)Out-place 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值