找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

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

admin 2019-8-21 21:20 110人围观 C++相关





通过上边的图大家也可以很清楚看到了准备要做大事情了!

死不死上边红黑相间似曾相似?看不懂的可谷歌翻译一下可见一般?!!正事预警!本文将在此公众号上通过一个个鲜活生动的情景故事和漫画讲解算法知识和逗比故事
大约每周一篇
好了!下面介绍一下漫画人物
阿广的老板(大熊猫饰)


阿广(蘑菇头饰)


















从梦中惊醒看到老板的面孔~瞬间清醒了许多!回答道!





初始状态


第一轮遍历

第二轮遍历


第三轮遍历

第四轮遍历


第五轮遍历


不用多讲解
只要智商正常多看几遍动画应该问题不大!了?下面剖析一下代码
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);
}
}






对冒泡排序常见的改进方法是加入标志性变量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);
}
}








(双击点看查看大图)









————

编辑 ∑Gemini

 来源:视学算法




----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:数学中国,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

yafeilinux和他的朋友们微信公众号二维码

微信公众号

专注于Qt嵌入式Linux开发等。扫一扫立即关注。

Qt开源社区官方QQ群二维码

QQ交流群

欢迎加入QQ群大家庭,一起讨论学习!

我有话说......