07-实现冒泡排序
冒泡排序的实现
-
冒泡排序比较简单,如下所示
-
import java.util.Arrays; import java.util.Random; import java.util.Scanner; public class BubbleSort { public static void main(String[] args) { // 随机生成(1-100)的指定长度的数组 Scanner scanner = new Scanner(System.in); System.out.print("请输入指定的数组长度:"); int[] arr = randomArr(scanner.nextInt()); System.out.println("源数组: arr = " + Arrays.toString(arr)); bubbleSort(arr); System.out.println("---------------------------------"); System.out.println("冒泡排序后的数组为:arr = " + Arrays.toString(arr)); } private static void bubbleSort(int[] arr) { /* 冒泡排序原理: 每一轮排序,从第一个开始,两两比较,大的放后面 每一次比较结束后,指针往后移动一位 */ // 排序的最大轮数为 arr.length - 1,即长度为4的最大排序轮数为3轮 for (int i = 0; i < arr.length - 1; i++) { System.out.println("----------当前为第[" + (i + 1) + "]轮排序----------"); // 每次比较次数,跟轮数有关,每一轮排序结束后,需要比较的数字都会 -1 // 又因为第一次比较的次数为 arr.length - 1 // 所以可以得出规律 每次比较的次数为 arr.length - 1 - i int temp = 0; // 用作两两交换 int times = 0; // 作为记录每轮的中的比较后两数的交换次数,如果该轮比较后两数的交换次数为0,那么此时的数组就已经为升序排序了 for (int j = 0; j < arr.length - 1 - i; j ++) { System.out.println("第[" + (j + 1) + "]次比较中比较的两个数字为:" + arr[j] + "," + arr[j + 1]); if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; times ++; } } System.out.println("本轮排序结束后的数组为:" + Arrays.toString(arr)); if (times == 0) { return; } } } private static int[] randomArr(int length) { Random random = new Random(); System.out.print("请输入数组的长度:"); int[] arr = new int[length]; for (int i = 0; i < arr.length; i++) { arr[i] = random.nextInt(101) + 1; } return arr; } }