常用排序算法总结

通常排序算法指的是内部排序算法,数据记录在内存中进行排序

排序算法大体分为两种:

一种是比较排序,时间复杂度O(nlogn)~O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等等

另一种是非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等等


其中有个重要的就是排序算法的稳定性。

排序算法的稳定性的简单形式为:如果Ai=Aj,排序前Ai在Aj之前,排序后Ai还在Aj之前,则这种算法排序是稳定的。通俗的讲就是两个相等的数的相对顺序不表。

注意的是:排序算法是否为稳定的是由具体的算法决定的,不稳定算法在某种情况下可以变为稳定的算法,而稳定的算法在某种条件下也可以变为不稳定的算法。

排序算法稳定性的好处:排序算法如果是稳定的,那么从一个键上进行排序,然后再从另一个键上排序,前一个键排序的结果可以为后一个键排序所用。基数排序就是这样的,先按低位排序,逐渐按高位排序,低位排序后元素的顺序在高位也相同时是不会改变的。

常用的比较函数算法:

冒泡排序--传送门

鸡尾酒排序--传送门

选择排序——传送门

插入排序--传送门

插入排序的改进:二分插入排序

希尔排序

归并排序

堆排序

快速排序   分割+快速排序

Java系统提供的Arrays.sort函数,对于基础类型,底层使用快速排序,对于非基础类型,底层使用归并排序。

这考虑到了排序算法的稳定性,对于基础类型,相同值是无差别的,排序前后相同值的相对位置并不重要,所以选择更为高效的快速排序,尽管是不稳定的排序算法,而对于非基础类型,排序前后相等实例的相对位置不宜改变,所以应该选择稳定的归并排序。

九大排序算法速度比较:传送门

常用的非比较排序算法:

计数排序

基数排序

桶排序



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值