排序算法及优化

①时间复杂度、空间复杂度的计算方式:
时间复杂度:表示算法用时增长和问题规模增长之间的关系。
空间复杂度:表示算法消耗额外空间增长和问题规模增长之间的关系。
四大忽略:
1.忽略表达式中的低次幂项,仅保留最高次幂项;
2.忽略最高次幂项的常数系数;
3.忽略表达式中所有的常数项;
4.如果整个表达式都是使用常数项进行表示,不论最终计算结果如何,都是用O(1)表示->常量
时间、空间复杂度。
排序算法的稳定性:
稳定的排序算法:序列当中的等值元素在排序结束后不交换相对位置
不稳定的排序算法:序列当中的等值元素在排序结束后有可能交换相对位置
面试题:你觉得是稳定的排序算法更好,还是不稳定的排序算法更好?
从以往的经验来看,不稳定的排序算法往往都比稳定的排序算法效率更高,比如:Java底层使用
的双轴快排算法,即使典型的不稳定排序算法。但是,如果针对同一组数据进行多维度的比较和
排序的话,不稳定的排序算法可能影响其他维度已经有序的数据,此时的稳定排序算法更好。
②冒泡排序:
思路:相邻位比较,反序则互换
结论:
结论1:在一轮冒泡排序结束之后,会将待排序序列当中的最大值(最小值)升至待排序序列的
最末端;
结论2:每一轮排序与前一轮排序相比,都少一次比较;
结论3:如果待排序序列的长度是n,那么只要进行n-1轮排序,即可得到一个完整有序的序列
——推论:一个元素,自己和自己是有序的;
结论4:假设冒泡排序的轮次从第0轮开始计算,那么第i轮排序开始的时候,序列当中就有i个元
素是有序的;
结论5:续上,在第i轮排序的过程中,就有i个元素不参与比较,本轮就会执行n-i-1次比较操作
代码:
时间复杂度:O(n 2 )
空间复杂度:O(1)
稳定性:稳定
优化思路:
如果在执行冒泡排序的某一轮排序操作的过程当中,没有任何元素发生交换,则表示当前序列已
经是完全有序状态了,后续轮次的比较没有意义继续执行。我们可以定义一个boolean类型的临
时变量标记位,在每一轮排序开始之前置为false,表示尚且没有元素发生交换;如果在这一轮
当中有元素进行交换,则在交换之后将这个标记位置为true。在一轮排序结束之后,对标记位进
行判断:如果标记位取值依然为false,则表示可以直接退出排序算法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值