冒泡排序 Java 实现 + 完整思路讲解

冒泡排序 Java 实现 + 完整思路讲解 一、排序思路冒泡排序核心思想重复走访要排序的数列依次比较相邻两个元素如果顺序错误前 后就交换它们。 每一轮循环结束后最大的元素会像气泡一样 “浮” 到数组末尾。流程拆解一共有n个元素最多需要n-1轮比较第i轮排序后末尾 i 个元素已经有序不需要再比较优化方案设置标记如果某一轮没有发生任何交换说明数组已经有序可以直接提前结束。时间复杂度 最坏 / 平均\(O(n^2)\) 最好优化后有序数组\(O(n)\) 稳定排序相等元素相对顺序不变二、基础版冒泡排序无优化java运行public class BubbleSort { public static void main(String[] args) { int[] arr {5, 3, 8, 4, 2, 7, 1, 6}; System.out.println(排序前); printArr(arr); bubbleSort(arr); System.out.println(排序后); printArr(arr); } /** * 基础冒泡排序 * param arr 待排序数组 */ public static void bubbleSort(int[] arr) { // 数组长度 int n arr.length; // 外层循环控制一共进行多少轮最多 n-1 轮 for (int i 0; i n - 1; i) { // 内层循环相邻比较 // 每一轮结束最后 i 个元素已经排好不需要遍历 for (int j 0; j n - 1 - i; j) { // 如果前一个 后一个交换 if (arr[j] arr[j 1]) { int temp arr[j]; arr[j] arr[j 1]; arr[j 1] temp; } } } } // 打印数组工具方法 public static void printArr(int[] arr) { for (int num : arr) { System.out.print(num ); } System.out.println(); } }三、优化版冒泡排序重点推荐增加swap标记数组提前有序时直接退出循环减少无效遍历java运行public class BubbleSortOpt { public static void main(String[] args) { int[] arr {2, 1, 3, 4, 5, 6, 7}; System.out.println(排序前); printArr(arr); bubbleSortOpt(arr); System.out.println(排序后); printArr(arr); } /** * 优化冒泡排序有序提前终止 */ public static void bubbleSortOpt(int[] arr) { int n arr.length; for (int i 0; i n - 1; i) { // 标记本轮是否发生交换 boolean swapped false; for (int j 0; j n - 1 - i; j) { if (arr[j] arr[j 1]) { int temp arr[j]; arr[j] arr[j 1]; arr[j 1] temp; swapped true; } } // 如果本轮一次交换都没有数组已有序直接跳出 if (!swapped) { break; } } } public static void printArr(int[] arr) { for (int num : arr) { System.out.print(num ); } System.out.println(); } }四、简单举例推演数组[5,3,2]第一轮 (i0) j053 → 交换 → [3,5,2] j152 → 交换 → [3,2,5] 最大数 5 沉到最后第二轮 (i1) j032 → 交换 → [2,3,5] 次大数 3 就位循环结束排序完成。