一、前言

在学习 Java 或进行算法面试准备时,冒泡排序(Bubble Sort) 是最基础、最容易理解的排序算法之一。它通过两两比较相邻元素,将较大的元素“冒泡”到数组的末尾,直到数组整体有序。

本文将从原理、实现步骤、代码示例、运行输出等多个方面进行讲解,帮助你彻底掌握这段经典算法。


二、冒泡排序的基本原理

冒泡排序的核心逻辑:

  1. 从数组的第一个元素开始,两两比较相邻元素;

  2. 若前一个元素比后一个大,则交换位置;

  3. 第一轮比较结束后,最大值会“冒泡”到数组末尾;

  4. 继续进行下一轮,范围缩小 1;

  5. 直到整个数组排序完成。

冒泡排序的示意图:

初始: [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 中如何完整实现冒泡排序

  • 运行输出示例

  • 冒泡排序的时间复杂度

  • 优化方式

冒泡排序虽然简单,但掌握它有助于理解其他更复杂的排序算法。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐