栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

十种经典排序算法介绍

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

十种经典排序算法介绍

冒泡排序

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

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

选择排序

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

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

插入排序

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

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

快速排序

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

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

归并排序

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

计数排序

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

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

桶排序

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

基数排序

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1014869.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号