美文网首页
超干货!一篇看完学会冒泡排序

超干货!一篇看完学会冒泡排序

作者: 程序兔子 | 来源:发表于2021-11-15 13:36 被阅读0次

一、什么是冒泡排序

       冒泡排序的英文是bubble sort,它是一种基础的交换排序。说到冒泡是不是就想起了快乐肥宅水呢?汽水中有许多小小的水泡哗啦哗啦的浮到上面来。这是因为组成小气泡的二氧化碳比水轻,所以小气泡可以一点一点地向上浮动。

       而冒泡排序之所以叫冒泡排序,正是因为这种排序算法的每一个元素都可以像小气泡一样,根据自身的大小,一点一点的向着数组的一侧移动。

二、图解冒泡排序

我们先看一个例子,有七个数字组成一个无序数列{5,6,3,4,1,7},对他进行冒泡排序。

按照冒泡排序的思想:把相邻的两个数字两两比较,当一个数字大于右侧相邻的数字时,交换他们的位置,当一个数字和他右侧的数字小于或等于的时候,不交换。

这样,作为数列中的最大的数字7就交换到了最右侧。这时第一轮冒泡结束。(有效区域只有最后一个) 

根据第一轮的交换细节,第二轮到第六轮的状态为下图。

到此为止,所有的数字都是有序的了,冒泡排序是一种稳定排序,由于该排序算法的每一轮都要遍历所有的数字,一共要遍历n-1,所以时间复杂度为O(n^2)。

那么我们如何区分排序算法是否稳定呢?

如果我们交换的时候,遇到两个相同的数字,如果两个相同的数字在排序之后相对位置没有交换,那么就是稳定的排序,反之则是不稳定的排序。

更多Java入门相关知识可以观看教学视频继续学习

三、代码实现

四、代码的优化

1、整体的思路

       从上面的例子不难看出,我们可以对原来的冒泡排序进行优化。我们仍然用上面呢个数列{5,6,3,4,1,7}为例子,从上面的图解可以看出在第五轮排序后,整个数列已经是有序的,但是排序算法还是执行了第六轮排序。

       优化的思路是:如果能判断出数列已经是有序的了,并且做出标记,那么就不会执行多余的排序。 

       所以我们可以用布尔变量isSorted作为标记,如果在本轮排序中有元素进行交换,则说明数列无序;如果在本轮排序中,没有元素进行交换,我们则认为此时数列已经为有序的,不需要再去进行下一轮的排序。

2、代码示例

原作者:「AXiYa_Ari」

原文链接:https://blog.csdn.net/AXiYa_Ari/article/details/121295558

相关文章

  • 选择排序就这么简单

    选择排序就这么简单 从上一篇已经讲解了冒泡排序了,本章主要讲解的是选择排序,希望大家看完能够理解并手写出选择排序的...

  • JS排序

    js中的冒泡排序: 排序结果: 超有用的链接,没事再看看吧 根据对象的某一属性排序 排序结果:

  • 算法-冒泡排序

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

  • JAVA冒泡排序「干货」

    一、冒泡排序 比较原理:比较两个相邻的元素,将值大的元素交换至右端。 比较思路:依次比较相邻的两个数,将小数放在前...

  • 谈谈几个常用的排序算法

    最近在读< >时,了解到了很多常用的排序算法,故写一篇读书笔记记录下这些排序算法的思路和实现. 冒泡排序 冒泡排序...

  • 详解排序算法--插入排序和冒泡排序

    冒泡排序插入排序插入排序和冒泡排序分析 冒泡排序 冒泡排序(英语:Bubble Sort,台湾另外一种译名为:泡沫...

  • 经典排序算法总结

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

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

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

  • iOS 面试必须会的---亲身经历+师兄面试后总结

    1.冒泡排序 冒泡排序,必须掌握 除了冒泡排序外还有 插入排序,对比排序,这里举例冒泡排序 2.单例 .h文件 ....

  • Java算法

    来咯来咯,这份超全Java算法整理它来咯!包含:二分查找、冒泡排序、插入排序、快速排序、希尔排序、归并排序、桶排序...

网友评论

      本文标题:超干货!一篇看完学会冒泡排序

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