亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

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

算法复杂度与优化

优化版本:提前终止

若某趟排序未发生任何交换,说明数组已有序,可提前结束:

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

  1. Java Hello World:你的第一个程序
  2. 精通 Java 数组:声明、初始化与操作全攻略
  3. 精通 Java 多维数组:二维 & 三维数组实战
  4. Java 数组复制技术:全面指南
  5. Java 对象数组创建:分步指南
  6. Java String.charAt() 详解:语法、返回类型、异常与实战示例
  7. 精通 Java String.endsWith():检查字符串后缀(示例)
  8. Java 构造器重载详解:规则、链式调用与实战代码
  9. Java 判断素数(质数)的完整指南与代码实现
  10. Java 冒泡排序详解:核心原理、完整代码与步骤演示
  11. Java 插入排序算法详解:核心原理、完整代码与步骤演示
  12. Java 选择排序详解:核心原理、完整代码与步骤演示