【每日算法】Day 1-1:三分钟彻底掌握冒泡排序(C++实现)

每日一个经典算法详解,今天从最基础的冒泡排序开始,图文+代码带你彻底搞懂排序原理。

一、什么是冒泡排序?

冒泡排序(Bubble Sort)是一种基于交换的排序算法,其核心思想是:

通过不断比较相邻元素,将较大元素逐步"浮"到数组末端,如同水中气泡上浮的过程。

算法特性:

  • 稳定排序(相等元素不改变顺序)

  • 时间复杂度:O(n²)(最坏/平均)

  • 空间复杂度:O(1)(原地排序)


二、算法原理详解

具体步骤分解:

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

  2. 如果前一个元素 > 后一个元素,交换它们的位置

  3. 对每一对相邻元素重复上述操作,直到数组末尾

  4. 完成一轮后,最后一个元素即为最大值

  5. 对剩余未排序部分重复步骤1-4,直到整个数组有序

三、C++代码实现

#include <iostream>
using namespace std;

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n-1; ++i) {         // 外层循环控制轮次
        bool swapped = false;              // 优化标记
        for (int j = 0; j < n-i-1; ++j) {  // 内层循环进行冒泡
            if (arr[j] > arr[j+1]) {
                swap(arr[j], arr[j+1]);
                swapped = true;
            }
        }
        if (!swapped) break; // 本轮无交换说明已有序,提前终止
    }
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr)/sizeof(arr[0]);
    
    bubbleSort(arr, n);
    
    cout << "排序结果:";
    for (int i = 0; i < n; ++i) {
        cout << arr[i] << " ";
    }
    return 0;
}

代码解析:

  • 双重循环结构:外层控制排序轮次,内层执行冒泡操作

  • 优化设计:swapped标记可提前终止已有序序列的无效比较

  • n-i-1的意义:每轮排序后末尾i个元素已有序,无需再比较

四、实例演算

以数组[5, 3, 8, 2]为例:

轮次比较操作当前数组状态
初始-5 3 8 2
第1轮5↔3, 5↔8, 8↔23 5 2 8
第2轮3↔5, 5↔23 2 5 8
第3轮3↔22 3 5 8

五、复杂度分析

情况时间复杂度空间复杂度
最坏情况O(n²)O(1)
最好情况O(n)O(1)
平均情况O(n²)O(1)

适用场景: 小规模数据排序或教学演示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值