打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

死不死上边红黑相间似曾相似?
看不懂的可谷歌翻译一下
可见一般?!!
正事预警!

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

大约每周一篇
好了!下面介绍一下漫画人物
阿广的老板
(大熊猫饰)
阿广
(蘑菇头饰)

从梦中惊醒
看到老板的面孔~
瞬间清醒了许多!回答道!
初始状态
第一轮遍历

第二轮遍历
第三轮遍历

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

 来源:视学算法

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
为什么冒泡排序是稳定的?
算法二:直接插入排序(O(n^2))
Java 冒泡排序算法
漫谈经典排序算法:三、冒泡排序 && 快速排序
【面试必考排序】冒泡排序
冒泡排序各层循环的含义
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服