经典排序算法之冒泡排序的优化方案

前言

在前面的文章经典排序算法之冒泡排序我们已经掌握了冒泡的原理和方法,但经过分析发现虽然结果是我们想要的,但却不是最优的冒泡排序,下面我们将结合前面文章中的示例进行一下冒泡的优化。

优化方案及思路分析

在我们的口诀中(n-1)轮循环是一种保底的情况,就是为了保证每两个相邻值都能得到比较,但是前面文章中的示例,其实在第四轮比较就已经得到了期望结果,而后面的两轮比较完全没有必要的。再假设一种更极端的情况,假如给定的数组就已经是一个有序数组了[1,4,7,8,10,12,21],那么按照口诀是不是依然还要进行6轮的循环比较呢,显然是不合理的。因此我们就应该想办法去优化一下。
其实优化方案很简单,我们可以定义一个标记,在每一次进行两个数比较时,如果IF条件成立说明还没有排好序,依然需要下一轮循环,因此在这个时候我们可以打个标记,就说还没排好序,需要继续下一轮循环。那么如果每次进行比较时条件都不成立,也就是说没有需要交换位置的相邻数了,那么就不需要再打标记,这个时候就不用再继续下一轮循环了,从而也避免一些不必要的开销。废话不多说,下面直接上优化后的代码更加一目了然

let nums = [
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值