冒泡排序java实现含基础、优化和通用三版本:基础版用双层循环每轮将最大值冒至末尾;优化版增加swapped标志提前终止;通用版通过泛型和comparable支持任意可比类型。

用Java原生代码手写冒泡排序实现数组升序,核心是两层循环:外层控制排序轮数,内层逐对比较相邻元素并交换。关键在于理解“每轮把最大值‘冒’到末尾”的逻辑,且可优化提前结束条件。
基础版本:标准双层循环
适用于整型数组,不依赖任何工具类,纯手工实现:
public static void bubbleSort(int[] arr) {
if (arr == null || arr.length arr[j + 1]) {
// 交换 arr[j] 和 arr[j+1]
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}说明:
• 内层循环上限设为 n - 1 - i,因为每轮后末尾 i 个元素已有序,无需再比;
• 比较条件用 arr[j] > arr[j + 1] 实现升序;若要降序,改为 即可。
优化版本:加入提前终止判断
如果某一轮未发生任何交换,说明数组已完全有序,可立即退出,避免冗余遍历:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
public static void bubbleSortOptimized(int[] arr) {
if (arr == null || arr.length arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true;
}
}
if (!swapped) break; // 无交换 → 已有序 → 提前结束
}
}说明:
• 对于已基本有序的数组,该优化能显著减少时间消耗;
• 最好情况(原数组升序)时间复杂度从 O(n²) 降到 O(n)。
通用版本:支持任意对象类型(需实现 Comparable)
使用泛型 + Comparable 接口,让排序方法适配 String、Integer、自定义类等:
public static <t extends comparable>> void bubbleSort(T[] arr) {
if (arr == null || arr.length 0) {
T temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true;
}
}
if (!swapped) break;
}
}</t>说明:
• 调用示例:bubbleSort(new Integer[]{3, 1, 4, 1, 5}); 或 bubbleSort(new String[]{"c", "a", "b"});
• 自定义类需实现 Comparable 并重写 compareTo 方法才能使用。
验证与测试建议
写完后务必用几组典型数据验证正确性:
- 空数组或单元素数组 → 不报错,不改变
- 已升序数组 → 原样输出(优化版应只跑1轮)
- 已降序数组 → 变成严格升序
- 含重复元素数组 → 稳定排序(相等时不交换,相对位置不变)
例如:int[] a = {64, 34, 25, 12, 22, 11, 90}; 排序后应为 {11, 12, 22, 25, 34, 64, 90}。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










