Java 冒泡排序详解:核心原理、完整代码与步骤演示
什么是冒泡排序?
冒泡排序是经典的比较型排序算法,反复遍历列表,比较相邻元素,顺序错误则交换。每轮遍历将下一个最大值“冒泡”到最终位置——故名“冒泡”。虽简单,但它是理解排序机制的绝佳入门。
Java 实现
下面程序演示对整数数组进行冒泡排序,并打印详细调试信息以展示算法运作过程。
package com.guru99;
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {860, 8, 200, 9};
System.out.println("---排序前数组---");
printArray(arr);
bubbleSort(arr);
System.out.println("---排序后数组---");
printArray(arr);
}
static void bubbleSort(int[] array) {
int n = array.length;
for (int i = 0; i < n; i++) {
System.out.println("第 " + (i + 1) + " 趟排序");
for (int j = 1; j < (n - i); j++) {
System.out.println("比较 " + array[j - 1] + " 和 " + array[j]);
if (array[j - 1] > array[j]) {
// 交换元素
int temp = array[j - 1];
array[j - 1] = array[j];
array[j] = temp;
System.out.println(array[j] + " 大于 " + array[j - 1]);
System.out.println("交换元素: 交换后数组");
printArray(array);
}
}
}
}
static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
}
}
程序运行输出
---排序前数组---
860 8 200 9
第 1 趟排序
比较 860 和 8
860 大于 8
交换元素: 交换后数组
8 860 200 9
比较 860 和 200
860 大于 200
交换元素: 交换后数组
8 200 860 9
比较 860 和 9
860 大于 9
交换元素: 交换后数组
8 200 9 860
第 2 趟排序
比较 8 和 200
比较 200 和 9
200 大于 9
交换元素: 交换后数组
8 9 200 860
第 3 趟排序
比较 8 和 9
第 4 趟排序
---排序后数组---
8 9 200 860
算法复杂度与优化
- 时间复杂度:最好 O(n)(已有序+优化标志)、平均/最差 O(n²)。
- 空间复杂度:O(1),原地排序。
- 稳定性:稳定排序(相等元素相对位置不变)。
优化版本:提前终止
若某趟排序未发生任何交换,说明数组已有序,可提前结束:
static void bubbleSortOptimized(int[] array) {
int n = array.length;
boolean swapped;
for (int i = 0; i < n; i++) {
swapped = false;
for (int j = 1; j < (n - i); j++) {
if (array[j - 1] > array[j]) {
int temp = array[j - 1];
array[j - 1] = array[j];
array[j] = temp;
swapped = true;
}
}
if (!swapped) break; // 本趟无交换,已有序
}
}
java
- Java Hello World:你的第一个程序
- 精通 Java 数组:声明、初始化与操作全攻略
- 精通 Java 多维数组:二维 & 三维数组实战
- Java 数组复制技术:全面指南
- Java 对象数组创建:分步指南
- Java String.charAt() 详解:语法、返回类型、异常与实战示例
- 精通 Java String.endsWith():检查字符串后缀(示例)
- Java 构造器重载详解:规则、链式调用与实战代码
- Java 判断素数(质数)的完整指南与代码实现
- Java 冒泡排序详解:核心原理、完整代码与步骤演示
- Java 插入排序算法详解:核心原理、完整代码与步骤演示
- Java 选择排序详解:核心原理、完整代码与步骤演示