冒泡排序(Bubble Sort)

冒泡排序是最基础的排序算法之一,名字来源于排序过程中,较大的元素像“气泡”一样逐渐“浮”到数组的顶端(或末端)。

一、核心思想

重复遍历要排序的列表,依次比较相邻的两个元素,如果顺序错误(比如前一个比后一个大),就交换它们的位置。 每一轮遍历都会将当前未排序部分的最大(或最小)元素“冒泡”到正确的位置。

  • 升序排序:每一轮将最大的元素放到末尾
  • 降序排序:每一轮将最小的元素放到末尾

二、代码实现

  • 基础版冒泡
 int arr[5] = {6, 3, 8, 2, 5}; // 假设5个数据
 for (int i = 0; i < 5 - 1; i++) {
     // 内层循环:每轮比较相邻元素,范围逐渐缩小
     for (int j = 0; j < 5 - 1 - i; j++) {
         if (arr[j] > arr[j + 1]) {
             // 交换相邻元素
             int temp = arr[j];
             arr[j] = arr[j + 1];
             arr[j + 1] = temp;
         }
     }
 }
 for (int i = 0; i < 5 - 1; i++) {
     cout << arr[i] << " ";
 }
  • 优化版冒泡
 int arr[5] = {6, 3, 8, 2, 5}; // 假设5个数据
 bool swapped; // 标记
 for (int i = 0; i < 5 - 1; i++) {
     swapped = false;  // 标记本轮是否发生交换
 ​
     for (int j = 0; j < 5 - 1 - i; j++) {
         if (arr[j] > arr[j + 1]) {
             // 交换
             int temp = arr[j];
             arr[j] = arr[j + 1];
             arr[j + 1] = temp;
             swapped = true;  // 发生了交换
         }
     }
 ​
     // 如果本轮没有交换,说明数组已有序,提前退出
     if (!swapped) {
         break;
     }
 }
 for (int i = 0; i < 5 - 1; i++) {
     cout << arr[i] << " ";
 }

冒泡排序属于稳定排序。