美文网首页
冒泡排序算法优化--双向冒泡

冒泡排序算法优化--双向冒泡

作者: 阮腾飞 | 来源:发表于2016-07-08 11:32 被阅读1054次

冒泡排序算法的核心是:大数下沉,小数上冒。每一次总能找到一个最大的或者最小的。

先看下一般冒泡排序算法的实现:

一般冒泡排序

这里需要注意的两轮循环的次数。在第一轮循环的时候,次数为数组长度减1。第二轮循环的次数为剩余需要排序数量。这个是这个算法的精华

这里引入了第一个问题:如果数字正好是跟排序规则相反的,那么确实需要执行length - 1次,比如说,原始数据是1,2,3,4,5。我现在需要做从大到小排序,那么确实需要执行四次。但是如果数据是2,1,5,4,3。外层循环只需要执行两次,结果就已经正确的,后续的其实根本不需要执行了。为了解决这个问题,修改下排序方法,加个标志位,如果第i轮已经不执行交换操作了,那么说明排序结束了。修改下bubbleSort方法:

加了交换标志位的

再引入第二个问题:正如一开始说的,冒泡排序的核心是每一次执行总能找到一个最大的和最小的。回想一下插入排序,插入排序有个优化的算法,叫做双向插入排序,那么是否也能做个类似的,做个双向冒泡排序。每一次外层循环,不仅能找到一个最小的,同时也能找到一个最大的。

先通过数据做个简单的推理:2,1,5,4,3,如果做降序,那么第一次外循环的结果应该是2 5 4 3 1。找到了一个最小数1放在最后,那么就应该考虑对前四个进行一个增序操作,只不过这个增序是筛选一个最大的放到第一位。按照这个规则实现下逻辑:

双向排序

最后,把这两套优化合并:

最终算法

相关文章

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 冒泡排序算法优化--双向冒泡

    冒泡排序算法的核心是:大数下沉,小数上冒。每一次总能找到一个最大的或者最小的。 先看下一般冒泡排序算法的实现: 这...

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 双线程冒泡排序算法

    双线程冒泡排序算法是对冒泡排序的优化,对冒泡排序加入了另外一个线程。 冒泡排序可以从数组的第0个元素开始排列,同样...

  • 从0开始——排序

    0.排序的复杂度比较 1.冒泡排序 冒泡排序基础版本1 正宗冒泡排序优化版本 2.选择排序 3.插入排序算法 4....

  • 冒泡排序的C语言实现

    冒泡排序 优化后的冒泡排序

  • iOS算法总结-冒泡排序

    iOS算法总结-冒泡排序 iOS算法总结-冒泡排序

  • 前端算法学习-第一篇

    冒泡排序算法 冒泡排序算法是最慢的排序算法之一,也是最容易实现的排序算法。之所以叫冒泡排序是因为使用这种算法排序时...

  • 基本算法——快速排序算法

    快速排序算法是对冒泡算法的改进。所以我们首先来简单的谈谈冒泡算法。 1.冒泡算法 冒泡排序(Bubble S...

网友评论

      本文标题:冒泡排序算法优化--双向冒泡

      本文链接:https://www.haomeiwen.com/subject/omzljttx.html