Java 基础算法系列:冒泡排序详解(附完整示例与输出)
·
一、前言
在学习 Java 或进行算法面试准备时,冒泡排序(Bubble Sort) 是最基础、最容易理解的排序算法之一。它通过两两比较相邻元素,将较大的元素“冒泡”到数组的末尾,直到数组整体有序。
本文将从原理、实现步骤、代码示例、运行输出等多个方面进行讲解,帮助你彻底掌握这段经典算法。
二、冒泡排序的基本原理
冒泡排序的核心逻辑:
-
从数组的第一个元素开始,两两比较相邻元素;
-
若前一个元素比后一个大,则交换位置;
-
第一轮比较结束后,最大值会“冒泡”到数组末尾;
-
继续进行下一轮,范围缩小 1;
-
直到整个数组排序完成。
冒泡排序的示意图:
初始: [5, 3, 8, 4, 2]
第一轮:
比较5和3 -> 交换 -> [3, 5, 8, 4, 2]
比较5和8 -> 不交换 -> [3, 5, 8, 4, 2]
比较8和4 -> 交换 -> [3, 5, 4, 8, 2]
比较8和2 -> 交换 -> [3, 5, 4, 2, 8] (最大值 8 就位)
第二轮:
比较3和5 -> ...
...
三、Java 代码示例:冒泡排序(含注释)
下面是一段完整的 Java 冒泡排序示例代码,便于你在 IDE 中直接运行:
public class BubbleSortExample {
public static void main(String[] args) {
int[] arr = {5, 3, 8, 4, 2};
System.out.println("排序前:");
printArray(arr);
bubbleSort(arr);
System.out.println("排序后:");
printArray(arr);
}
// 冒泡排序实现
public static void bubbleSort(int[] array) {
int n = array.length;
for (int i = 0; i < n - 1; i++) {
// 每轮会把最大值移动到末尾位置
for (int j = 0; j < n - 1 - i; j++) {
if (array[j] > array[j + 1]) {
// 交换相邻元素
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
// 打印数组方法
public static void printArray(int[] arr) {
for (int num : arr) {
System.out.print(num + " ");
}
System.out.println();
}
}
四、运行结果输出
假设我们运行上述程序,将得到如下输出:
排序前:
5 3 8 4 2
排序后:
2 3 4 5 8
可以看到,数组已经从小到大成功排序。
五、时间复杂度分析
| 情况 | 时间复杂度 |
|---|---|
| 最好情况(已排序) | O(n)(如果做了优化)/ O(n²)(未优化) |
| 最坏情况(逆序) | O(n²) |
| 平均情况 | O(n²) |
| 空间复杂度 | O(1) |
冒泡排序的效率不高,但它的实现简单,非常适合作为学习排序算法的起点。
六、可扩展优化:提前结束循环
当某一轮没有发生任何交换时,说明数组已经完全有序,可以提前结束排序:
public static void bubbleSortOptimized(int[] array) {
int n = array.length;
for (int i = 0; i < n - 1; i++) {
boolean swapped = false;
for (int j = 0; j < n - 1 - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
swapped = true;
}
}
if (!swapped) break; // 若无交换,提前终止
}
}
七、总结
通过本文,你了解了:
-
冒泡排序的工作原理
-
Java 中如何完整实现冒泡排序
-
运行输出示例
-
冒泡排序的时间复杂度
-
优化方式
冒泡排序虽然简单,但掌握它有助于理解其他更复杂的排序算法。
更多推荐
所有评论(0)