大家好,又见面了,我是你们的朋友全栈君。
1、冒泡排序
1.1 介绍
冒泡排序(Bubble Sorting) 的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后面,就像水底下的气泡一样逐渐向上冒。
图解:
数组元素随次数变化:
1.2 代码实现
1.2.1 基本实现
代码:
public class BubbleSort {
public static void main(String[] args) {
int[] arr1 = {
9, 5, 6, 8, 2, 7, 3, 4, 1 };
int temp = 0; // 用于交换
for (int i = 0; i < arr1.length - 1; i++) {
for (int j = 0; j < arr1.length - i - 1; j++) {
// 如果前面的数比后面的数大,就直接交换
if (arr1[j] > arr1[j + 1]) {
temp = arr1[j];
arr1[j] = arr1[j + 1];
arr1[j + 1] = temp;
}
}
System.out.println("第" + (i + 1) + "趟后的数组元素");
System.out.println(Arrays.toString(arr1));
}
// 输出最后的结果
System.out.println("最终结果:");
for (int i : arr1) {
System.out.print(i + " ");
}
}
}
1.2.2 优化
当给定的数组,在一次循环中没有任何的交换时,表明这个数组已经是有序的,就不用继续进行下面的循环,从而提前结束;
例如:int [] arr1= {1,2,4,3};
使用上面的代码,流程如下:
在第二次交换时就没有交换了,可以直接结束,优化后流程:
优化的代码: 在代码中添加一个判断,在此次循环中是否有数据交换。
public class BubbleSort {
public static void main(String[] args) {
int [] arr1= {
1,2,4,3};
int temp=0; //用于交换
boolean flag=false; //优化,判断循环是否发生交换
for(int i=0;i<arr1.length-1;i++) {
for(int j=0;j<arr1.length-i-1;j++) {
//如果前面的数比后面的数大,就直接交换
if(arr1[j]>arr1[j+1]) {
flag=true;
temp=arr1[j];
arr1[j]=arr1[j+1];
arr1[j+1]=temp;
}
}
if(!flag) {
break; //没有交换直接结束
}else {
flag=false; //重置flag,方便下一次循环使用
}
System.out.println("第"+(i+1)+"趟后的数组元素");
System.out.println(Arrays.toString(arr1));
}
//输出最后的结果
System.out.println("最终结果:");
for (int i : arr1) {
System.out.print(i+" ");
}
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152148.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...