冒泡、选择、插入排序简介(C++)

冒泡排序(Bubble Sort)

冒泡排序通过重复遍历数组,比较相邻元素并交换位置,将较大元素逐渐"冒泡"到数组末尾。

C++实现代码

cpp 复制代码
void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                swap(arr[j], arr[j + 1]);
            }
        }
    }
}

特点

  • 时间复杂度:平均和最坏情况下为 O(n\^2),最好情况下(已排序)为 O(n)
  • 空间复杂度:O(1)(原地排序)。
  • 稳定排序(相等元素相对位置不变)。

选择排序(Selection Sort)

选择排序每次遍历未排序部分,找到最小元素并交换到已排序部分的末尾。

C++实现代码

cpp 复制代码
void selectionSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int minIdx = i;
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIdx]) {
                minIdx = j;
            }
        }
        swap(arr[i], arr[minIdx]);
    }
}

特点

  • 时间复杂度:始终为 O(n\^2)(无论输入是否有序)。
  • 空间复杂度:O(1)
  • 不稳定排序(交换可能破坏相等元素的顺序)。

插入排序(Insertion Sort)

插入排序将数组分为已排序和未排序两部分,逐个将未排序元素插入到已排序部分的正确位置。

C++实现代码

cpp 复制代码
void insertionSort(int arr[], int n) {
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}

特点

  • 时间复杂度:平均和最坏情况下为 O(n\^2),最好情况下(已排序)为 O(n)
  • 空间复杂度:O(1)
  • 稳定排序(通过顺序插入保持相等元素顺序)。

适用场景对比

  • 冒泡排序:教学用途,实际应用较少。
  • 选择排序:适用于数据量小且交换成本高的场景。
  • 插入排序:适用于部分有序或小规模数据。
相关推荐
To_OC7 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
旖-旎8 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
To_OC9 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
delishcomcn10 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法
触底反弹10 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
雪碧聊技术10 小时前
力扣 LCR 091. 粉刷房子 —— 动态规划入门详解
算法·动态规划
延凡科技13 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
CV-Climber13 小时前
检索技术的实际应用
人工智能·算法
hhzz14 小时前
Tiger AI Platform平台中增加人脸识别功能
图像处理·人工智能·算法·计算机视觉·大模型