一、冒泡排序(常规实现)
package Bubble;
import java.util.Arrays;
import java.util.Scanner;
public class Bubble {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入排序数组长度:");
int n = scanner.nextInt();
int[] arr = new int[n];
//将每个输入的数,存入数组中
System.out.println("请输入冒泡排序前的数组(enter键结束):");
for (int i = 0 ; i<arr.length ;i++){
arr[i] = scanner.nextInt();
}
//冒泡排序过程
int temp;
//冒泡趟数
for (int i = 0; i<arr.length-1;i++){
System.out.println("第"+(i+1)+"趟冒泡:");
//每次的比较次数
for (int j = 0;j<arr.length-1-i;j++){
//如果前面数字比后面数字大则交换
if (arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
System.out.println("第"+(j+1)+"次交换:"+Arrays.toString(arr));
}
}
System.out.println("冒泡排序完成!!!!" );
System.out.println("冒泡排序后的结果为:"+Arrays.toString(arr) );
}
}
结果
二、代码优化(中级)
我们发现常规代码结果中后面几趟未交换,后面冒泡趟数还在执行,所以设置标志位,判断若没有交换,则不进行后面几趟
package Bubble;
import java.util.Arrays;
import java.util.Scanner;
public class Bubble {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入排序数组长度:");
int n = scanner.nextInt();
int[] arr = new int[n];
//将每个输入的数,存入数组中
System.out.println("请输入冒泡排序前的数组(enter键结束):");
//依次将每个键入的数,存在arr数组中
for (int i = 0 ; i<arr.length ;i++){
arr[i] = scanner.nextInt();
}
//冒泡排序过程
int temp;
//冒泡趟数
for (int i = 0; i<arr.length-1;i++){
System.out.println("第"+(i+1)+"趟冒泡:");
//设置标志位,判断若没有交换,则不进行后面几趟
boolean flag = true;
//每次的比较次数
for (int j = 0;j<arr.length-1-i;j++){
//如果前面数字比后面数字大则交换
if (arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
//发生交换给flag赋值false
flag = false;
}
System.out.println("第"+(j+1)+"次交换:"+Arrays.toString(arr));
}
if (flag){
break;
}
}
System.out.println("冒泡排序完成!!!!" );
System.out.println("冒泡排序后的结果为:"+Arrays.toString(arr) );
}
}
结果