当前位置: 首页 > news >正文

图解Java实现冒泡排序(Bubble Sort)

 

核心思想:


冒泡排序就像「水中的气泡上浮」,每次比较相邻元素,如果顺序不对就交换,把最大的元素一步步推到数组末尾。重复这个过程,直到整个数组有序。

---

📌 分步拆解(以数组 `[5, 3, 8, 1]` 为例)

 第一轮冒泡(找出最大值 8)


```
初始数组:[5, 3, 8, 1]
Step 1: 5 vs 3 → 交换 → [3,5,8,1]
Step 2: 5 vs 8 → 不交换
Step 3: 8 vs 1 → 交换 → [3,5,1,8]
结果:最大值 8 沉底 → [3,5,1,8]
```

第二轮冒泡(找出次大值 5)


```
当前数组:[3,5,1,8]
Step 1: 3 vs 5 → 不交换
Step 2: 5 vs 1 → 交换 → [3,1,5,8]
结果:次大值 5 沉底 → [3,1,5,8]
```

 第三轮冒泡(找出第三大值 3)


```
当前数组:[3,1,5,8]
Step 1: 3 vs 1 → 交换 → [1,3,5,8]
结果:第三大值 3 沉底 → [1,3,5,8]
```

 最终结果:


数组有序 → **[1, 3, 5, 8]**

---

 🖥️ Java代码实现


```java
public class BubbleSort {
    public static void bubbleSort(int[] arr) {
        // 外层循环:控制冒泡轮数(每轮确定一个最大值)
        for (int i = 0; i < arr.length - 1; i++) {
            // 内层循环:比较相邻元素并交换
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    // 交换元素(像气泡上浮)
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] arr = {5, 3, 8, 1};
        bubbleSort(arr);
        System.out.println(Arrays.toString(arr)); // 输出 [1, 3, 5, 8]
    }
}
```

---

 🎨 图解流程


```
初始数组: [5] [3] [8] [1]
          ↑   ↑
第一轮比较5和3 → 交换 → [3][5][8][1]

第一轮继续:      [5] [8] → 不交换
               ↑   ↑
第一轮继续:        [8] [1] → 交换 → [3][5][1][8]
                     ↑   ↑

第二轮开始: [3][5][1][8]
          ↑   ↑
第二轮比较3和5 → 不交换

第二轮继续:   [5][1] → 交换 → [3][1][5][8]
             ↑   ↑
```

---

 ⚙️ 时间复杂度


- **最坏情况**:O(n²)(完全逆序)
- **最佳情况**:O(n)(已有序,可优化提前终止)

---

 💡 关键点总结


1. **双重循环**:外层控制轮数,内层遍历比较。
2. **相邻交换**:每次只交换相邻元素。
3. **逐步沉底**:每轮确定一个最大值到末尾。
4. **适用场景**:小规模数据或教学演示(实际开发中效率较低)。

相关文章:

  • Keil C51中32位变量赋值异常问题分析与解决
  • 【概念】什么是UI(User interface)什么是UX(User experience)?
  • Leetcode39:组合总和——回溯算法
  • myeclise运行项目
  • 如何在Git历史中抹掉中文信息并翻译成英文
  • 卷积神经网络(CNN)可视化网站汇总
  • AI工具导航大全 | 2025精选版(持续更新)
  • HTML 开发者的智能助手:通义灵码在 VSCode 中的应用
  • Vue学习笔记 - 逻辑复用 - 组合式函数
  • deepseek热度已过?
  • Transformer多卡训练初始化分布式环境:(backend=‘nccl‘)
  • 深入理解 Vue 的数据代理机制
  • ANSI C 和 C89/C90
  • Windows 图形显示驱动开发-WDDM 2.0功能_上下文监视
  • C/C++ 知识点:静态语言与动态语言
  • 修改ESP32CAM的示例CameraWebServer里的camera_index.h的方法
  • 软考中级-软件设计师 2022年下半年下午题真题解析:通关秘籍+避坑指南
  • 嵌入式汇编语言从小白到入门:从零开始的底层编程之旅
  • QT Sqlite数据库-教程001 创建数据库和表-下
  • Qt之OpenGL使用Qt封装好的着色器和编译器
  • iis网站日志/济南网站seo公司
  • 建设制作外贸网站公司/东莞seo排名外包
  • wordpress首页文章并排/潍坊seo关键词排名
  • 日本女做受网站BB/百度搜索榜
  • 做导购网站多少钱/企业管理软件排名
  • 局域网怎么建设网站/芭蕉视频app无限次数