十种经典排序算法介绍

冒泡排序

稳定的,一开始正序的话,不需要交换,但是也要比较固定次数。逆序比较和交换次数最多。

冒泡优化:可以设置一个标记位,如果某次循环中有交换出现,就把标记位置为1,如果标记位是0的话直接退出(说明剩下的都有序)。

选择排序

每次循环找到最小的一位位置,遍历一边后交换。选择排序不稳定!一开始正序的话,还是要全部遍历比较。逆序的话交换次数不是最多。

优化方法:一趟中既选出最小值,也选出最大值,交换两个位置。

插入排序

假定前面部分都排好序,把每一个元素在已排数组中从后往前找合适位置。插入排序是稳定排序!因为移动耗时高,时间复杂度也是n方。一开始有序的话,也要进行全部比较。逆序的话移动次数最多。

优化方法:在寻找方面使用二分查找,减少比较次数;每次多拿几个元素一起插入;数据链表化,可以精准插入,不用移动这么多次。不过这些都是n方复杂度。还有一个希尔排序,理解就行。
希尔排序,对插入排序的改进方法。分多个间隔的插入排序。减少移动元素的次数,和查找的次数。时间复杂度突破n方,但是如果采用步长为长度一半的方法的话,最坏也是n方,具体跟选择步长有关,下界是nlogn。不是稳定排序。

快速排序

就是挖坑填数加分治。不稳定的。在选择的基准值为最值的时候退化为n方复杂度。

优化方法:更合理的基准数,可以从多个数中选中值,避免选到极值。结合插入排序,当序列数少于10时,用插入排序做。

归并排序

将两个有序的子数列合并,将每个数看成一个子序列,然后不断两两组合归并排序。时间复杂度nlogn,归并排序稳定。局部有序时交换次数比较小。(明天看看代码)

计数排序

复杂度n+k,稳定。要求必须是整数,且元素比较集中。

优化方法:记录最小值和最大值,类似操作系统内存装入时冲定位寄存器。

桶排序

准备几个桶,按最高位数放到桶里单独排序。根据每个桶的排序算法不同,时间复杂度和稳定性不一定。分布要比较均匀,

基数排序

分别按个位十位百位的数字分配到好几轮桶中,比如按个位分配到十个桶,然后按十位分配到十个桶等等,然后拿出按个位排的顺序,再放到十位桶,再按顺序拿出来,再放到百位桶………最后拿出来就是有序的,而且稳定。时间复杂度nk,稳定。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值