常见排序的稳定性与复杂度分析

1.稳定性

前言:要判断一种算法的稳定与否,就是看其相等元素的相对位置是否发生改变。

所以如希尔排序,选择排序,堆排序,快速排序(不稳定)这些涉及移换位置的往往很难控制稳定性。

冒泡,插入以及归并排序(稳定)这些只发生相邻元素交换,或者干脆不交换,确保了相同元素的相对位置不发生交换。

2.时间复杂度

1.O(N^2):冒泡,直接插入,选择。这些排序在书写中无外乎是两层整体遍历的嵌套循环,很容易得出。

2.O(N*logN):堆排,归并,快排。这些利用了递归思想,将数组不断二分再遍历。

3.O(N^1.3):这是希尔排序的时间复杂度(约等于)

 这里是对希尔排序时间复杂度的简单分析。但你要思考,当第一趟排序次数我们计算出为n时,第二次就不再是最坏情况了,所以第二次排序次数实际上是要小于4n的,以此类推,可以得出这幅图

最后,利用一些数学知识才得出的这个O(N^1.3),这里超出本人能力范围,不做赘述。

3.空间复杂度

空间复杂度的判断其实就是看是否开辟了额外的空间:以上提及的算法中除归并与快排,其余空间复杂度全为O(1)。

归并空间复杂度:O(N)。因为归并需要开辟一个临时数组来储存合并后的结果。

快排空间复杂度:O(logN)。递归树的深度为O(logN),即为栈空间用量。

OK!本文到此也就结束了,感谢各位的捧场支持!!!

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值