逗比讲算法:什么是冒泡排序?

逗比讲算法:什么是冒泡排序?插图
逗比讲算法:什么是冒泡排序?插图1
通过上边的图
大家也可以很清楚看到了
准备要做大事情了!

逗比讲算法:什么是冒泡排序?插图2
死不死上边红黑相间似曾相似?
看不懂的可谷歌翻译一下
可见一般?!!
正事预警!

本文将在此公众号上通过一个个
鲜活生动的情景故事和漫画
讲解算法知识和逗比故事

大约每周一篇
好了!下面介绍一下漫画人物

阿广的老板
(大熊猫饰)
逗比讲算法:什么是冒泡排序?插图3

阿广
(蘑菇头饰)
逗比讲算法:什么是冒泡排序?插图4
逗比讲算法:什么是冒泡排序?插图5
逗比讲算法:什么是冒泡排序?插图6
逗比讲算法:什么是冒泡排序?插图7
逗比讲算法:什么是冒泡排序?插图8
逗比讲算法:什么是冒泡排序?插图9
逗比讲算法:什么是冒泡排序?插图10
逗比讲算法:什么是冒泡排序?插图11
逗比讲算法:什么是冒泡排序?插图12
从梦中惊醒
看到老板的面孔~
瞬间清醒了许多!回答道!
逗比讲算法:什么是冒泡排序?插图13
逗比讲算法:什么是冒泡排序?插图14
逗比讲算法:什么是冒泡排序?插图15
初始状态
逗比讲算法:什么是冒泡排序?插图16

第一轮遍历
逗比讲算法:什么是冒泡排序?插图17

第二轮遍历
逗比讲算法:什么是冒泡排序?插图18

第三轮遍历
逗比讲算法:什么是冒泡排序?插图19

第四轮遍历
逗比讲算法:什么是冒泡排序?插图20

第五轮遍历
逗比讲算法:什么是冒泡排序?插图21

不用多讲解
只要智商正常
多看几遍动画
应该问题不大!了?
下面剖析一下代码
public void bubbleSort(int[] list) {
int temp = 0; // 用来交换的临时数
// 要遍历的次数
for (int i = 0; i < list.length - 1; i++) {
// 从后向前依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上
for (int j = list.length - 1; j > i; j--) {
// 比较相邻的元素,如果前面的数大于后面的数,则交换
if (list[j - 1] > list[j]) {
temp = list[j - 1];
list[j - 1] = list[j];
list[j] = temp;
}
}
System.out.format("第 %d 趟: ", i);
printAll(list);
}
}


逗比讲算法:什么是冒泡排序?插图22
逗比讲算法:什么是冒泡排序?插图23
逗比讲算法:什么是冒泡排序?插图24
对冒泡排序常见的改进方法是加入标志性变量exchange,用于标志某一趟排序过程中是否有数据交换。
如果进行某一趟排序时并没有进行数据交换,则说明所有数据已经有序,可立即结束排序,避免不必要的比较过程。

改进代码如下:
// 对 bubbleSort 的优化算法
public void bubbleSort_2(int[] list) {
int temp = 0; // 用来交换的临时数
boolean bChange = false; // 交换标志
// 要遍历的次数
for (int i = 0; i < list.length - 1; i++) {
bChange = false;
// 从后向前依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上
for (int j = list.length - 1; j > i; j--) {
// 比较相邻的元素,如果前面的数大于后面的数,则交换
if (list[j - 1] > list[j]) {
temp = list[j - 1];
list[j - 1] = list[j];
list[j] = temp;
bChange = true;
}
}
// 如果标志为false,说明本轮遍历没有交换,已经是有序数列,可以结束排序
if (false == bChange)
break;
System.out.format("第 %d 趟: ", i);
printAll(list);
}
}

逗比讲算法:什么是冒泡排序?插图25
逗比讲算法:什么是冒泡排序?插图26
逗比讲算法:什么是冒泡排序?插图27
逗比讲算法:什么是冒泡排序?插图28
(双击点看查看大图)

逗比讲算法:什么是冒泡排序?插图29
逗比讲算法:什么是冒泡排序?插图30

逗比讲算法:什么是冒泡排序?插图31
逗比讲算法:什么是冒泡排序?插图32

————

编辑 ∑Gemini

 来源:视学算法


泰勒定理的奇闻轶事

丘成桐:漫谈微分几何

Leibniz 如何想出微积分?(一)

线性相关和秩的物理意义

数学史上你认为最丑陋的公式是什么?

陶哲轩谈什么是好的数学

田渊栋:数学的用处(下篇)

你绝对没想过原来数学家这么流氓,一言不合就进行暴力证明

世界上最牛的五篇博士论文

数学中有哪些巧合让人眼前一亮?

算法立功!清华毕业教授美国被抢车,警察无能为力自己用“贪心算法”找回

学术史上的奇文:怎样用数学抓狮子

台大教授的反思:最难的一课 我们却没教给学生

☞麻省理工学院(MIT)研究生学习指导—— 怎样做研究生

☞分享 数学,常识和运气 ——投资大师詹姆斯·西蒙斯2010年在MIT的讲座


算法数学之美微信公众号欢迎赐稿

稿件涉及数学、物理、算法、计算机、编程等相关领域,经采用我们将奉上稿酬。

投稿邮箱:math_alg@163.com

    已同步到看一看

    发送中

    点赞