前言
今天太累了,想自己做一个算法可视化的网站,可是毫无思路,墨迹了一天才发现已经有大佬做出来了,效果特别好,所以我就在大佬的基础上小小的修改了一下,然后自己做了注解,分步骤剪了视频,实在累了,就写个冒泡算法偷个懒,也作为这个系类的开头。之后每个周日都会更新一个算法可视化系类的博客,若是大家觉得不错,点赞可好
冒泡排序
核心思想
冒泡排序是最简单的一种排序算法了,它可以用八个字来概括:
相邻比较,大数后移
废话不多说,直接开始
玩游戏学算法之冒泡排序
循环体:
当发现左侧数据大于右侧数据时,便将两数进行交换
if (num[i-1]>num[i]) {
int temp = num[i];
num[i]=num[i-1];
num[i-1] = temp;
flag = true;
}
内层循环
内层循环控制着对数组的那一部分进行遍历。当一次循环结束,下一次循环需要遍历的数组个数就会减一,因为上一次循环会将其遍历数据中的最大值归位。
//count 记录了这时第几次内层循环被执行。
for (int i = 1; i <= num.length-count; i++) {
if (num[i-1]>num[i]) {
int temp = num[i];
num[i]=num[i-1];
num[i-1] = temp;
flag = true;
}
}
排序完成及算法优化。
若在某一次循环过程中发现循环体未被执行,这说明所有左侧数据都小于右侧数据,即数组排序完成,循环退出
public class Demo {
public static void main(String[] args) {
int [] num = new int[]{4,2,6,3,8,9,7};
boolean flag = true;
int count=1;
while(flag) {
flag = false;
for (int i = 1; i <= num.length-count; i++) {
if (num[i-1]>num[i]) {
int temp = num[i];
num[i]=num[i-1];
num[i-1] = temp;
flag = true;
}
}
count++;
}
for (int i : num) {
System.out.println(i);
}
}
}