十大排序算法的粗略总结——了解向

参考了 十大排序从入门到入赘 - 力扣(LeetCode)有时间想更全面了解可以看看这里。

逆序:排序后的数组一般是从小到大[0,1,2,3]  当数组为[3,1,2,0],称数组中有逆序,比如3和1、3和2、3和0、1和0、2和0。排序完成后数组的逆序对数量应该为0,所以排序其实是消除逆序对的过程。

一、冒泡排序:冒泡排序始终只交换相邻元素,比较对象大小相等时不交换,相对位置不变,故稳定。

优化:提前结束优化和冒泡界优化。

           提前结束优化:当前轮没有发生交换,则视为排序完成不再执行循环

           冒泡界优化:用Lastindex记录上一轮循环已排序的数组的下标,

二、选择排序:使用min_i记录未排序数组中的最小值,每一次循环寻找一个。不稳定,

例: [4,4,2] 。第一轮交换第一个 4 和 2,则两个 4 位置关系改变。

优化:双元选择优化

三、插入排序:依次将未排序的数遍历比较,插入已排序的数组,稳定

 优化:折半插入,通过二分查找找到应该插入的位置。

四、希尔排序:对间隔为gap的数字进行排序,改变gap值,gap有不同的变化方式。不稳定

五、归并排序:将数组划分为左右两个子数组,直到长度为1,然后在合并中排序,稳定

六、快速排序:在数组中确定pivot作为比较的标准,比pivot小的放在左侧,比pivot大放在右侧。不稳定

七、堆排序:构建大顶堆。每次交换堆顶和堆底元素之后调用一次下滤保证堆是大顶堆。不稳定

八、计数排序:使用计数数组记录arr中的数组出现的次数,完成后依次输出计数数组的数组。稳定性取决于是否使用稳定性优化(不太理解)

九、基数排序:记录数组中最大的数的位数,依次对位进行计数排序。稳定

十、桶排序:按照一定的规律将待排数组划分到不同的桶(比如数组),每个桶单独排序,排序稳定性取决于排序方法。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值