常用基础七大排序算法总结

本文主要介绍以下七大排序算法的性能总结以及稳定性分析,会将各个算法的简略思想再过一次,便于理解

1.直接插入:将未排好的数插入到已经有序的队列中,未排的数要和已经有序的队列中的所有数字进行比较,如果有n个数,对于完全乱序来说,其比较次数为N+N-1++++一直加到1,所以时间复杂度是O(n^2),当然,对于本身有序的队列来说,只需要N-1次比较,因为所有的数据都不需要动。综上,时间复杂度取最坏情况,O(N^2),空间的话就是O(1)。

稳定性:稳定。在插入排序中,我们假设前面的序列是有序的,当前数字如果小于前面的数,就将前面的数字往后挪,如果大于前面的数字就不挪了,就放在它后面,如果等于前面的数字我们也是放在它的后面,故插入排序是稳定的

2.希尔:希尔是直接插入的改进,采用了预排和直接插入排序结合,

稳定性:不稳定。因为一旦一样的数分在了不同的组,那就无法保证稳定性。

3.选择:从待排队列中,依次选择最大(小)值,每次选择一个数据出来,第一趟需要比较N次,第二趟N-1次。这里就是N+N-1++++一直加到1,无论数据是什么情况,时间复杂度均不变,空间复杂度是O(1)

稳定性:不稳定。比如4 2 3 2,排完之后,第二个2会排到第一个2之前,所以不稳定。

4.堆排:建堆+排序,这里建堆的时间复杂度是O(n),排序的时间复杂度是logN,所以总的时间复杂度是O(N*logN)

稳定性:不稳定。假设有一个大堆,根节点和其其中一个较大子节点数值相同,当发生排序的时候,根节点会变换位置到最后面,两者相对位置发生变化,所以是不稳定的。

5.冒泡:相邻元素都要相互比较,每次比较一轮,就会找到序列中最大的一个或最小的一个。时间复杂度O(n^2),空间复杂度是O(1)

稳定性:稳定。遇到大的才交换,小于和等于都不交换。

6.快速:快排这里的方法比较多,不再细说。

稳定性:不稳定。假如选择的key之后,左边和右边都有和key一样的值,那么最后交换的时候,key的相对位置就会发生变化,所以是不稳定的。

7.归并:这里采取的是分治思想

稳定性:稳定。因为交换元素时,可以在相等的情况下不移动。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何以过春秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值