冒泡排序原理及C++的实现方法

冒泡排序是一种简单的排序算法,通过重复遍历列表并交换相邻元素来排序。

一、算法原理

  1. 核心思想:每次遍历将当前未排序部分的最大元素"冒泡"到正确位置。
  2. 操作方式:
  • 比较相邻元素
  • 顺序错误则交换位置
  • 每轮遍历减少一次比较次数

二、模拟示例

以下用 4个数据的数组 [4, 3, 2, 1] 详细演示冒泡排序过程:


初始数组
[4, 3, 2, 1]


第一轮遍历(确定最大值)
目标:将最大的数移动到最右侧
比较与交换

  1. 比较 4 和 3 → 交换 → [3, 4, 2, 1]
  2. 比较 4 和 2 → 交换 → [3, 2, 4, 1]
  3. 比较 4 和 1 → 交换 → [3, 2, 1, 4]

结果:最大值 4 到达末尾,数组变为 [3, 2, 1, 4]


第二轮遍历(确定次大值)
目标:将剩余部分 [3, 2, 1] 的最大值移到倒数第二位
比较与交换

  1. 比较 3 和 2 → 交换 → [2, 3, 1, 4]
  2. 比较 3 和 1 → 交换 → [2, 1, 3, 4]

结果:次大值 3 到达倒数第二位,数组变为 [2, 1, 3, 4]


第三轮遍历(确定第三大值)
目标:将剩余部分 [2, 1] 的最大值移到倒数第三位
比较与交换

  1. 比较 2 和 1 → 交换 → [1, 2, 3, 4]

结果:第三大值 2 到达倒数第三位,数组变为 [1, 2, 3, 4]


第四轮遍历(无需操作)
目标:检查剩余部分 [1]
发现:只剩一个元素,无需比较
最终结果:[1, 2, 3, 4]


关键点总结

轮次 比较次数 操作内容 当前数组状态
第1轮 3次比较 将4移动到末尾 [3,2,1,4]
第2轮 2次比较 将3移动到倒数第二位 [2,1,3,4]
第3轮 1次比较 将2移动到倒数第三位 [1,2,3,4]
第4轮 0次比较 提前终止(已有序) [1,2,3,4]

三、为什么选择冒泡排序?

教学意义:直观展示排序算法的基本思想(比较与交换)
实际应用:小数据量(如嵌入式设备中的传感器数据排序)
优化潜力:通过 swapped 标志可提前终止(如示例中第4轮未执行)

四、算法特性

稳定性:稳定排序(相等元素不交换)
空间复杂度:O(1)(原地排序)
适用场景:小规模数据、近乎有序的数据、教学演示场景
时间复杂度分析

  • 最优情况(已排序):O(n)(需优化版本)
  • 平均/最差情况:O(n²)

五、模板代码

// n个数排序n-1轮
for(int i=1; i<=n-1; i++){
    // 数据从数组的下标0位置开始存储
    for(int j=0; j<n-i; j++){
        // 从小到大排序(如果是从大到小使用小于号:<)
        if(a[j]>a[j+1]){
            t=a[j];
            a[j]=a[j+1];
            a[j+1]=t; 
        }
    } 
}

你可能感兴趣的:(c++,排序算法,算法)