C语言:三大基础排序算法模板 冒泡 / 选择 / 插入)

前言

在 C 语言初学阶段,冒泡排序、选择排序、插入排序 是必须掌握的三大基础排序算法。逻辑简单、代码固定、考试和作业高频必考,本文整理可直接复用的降序通用模板,附带核心思想、完整代码、速记表格,收藏即可直接套用。

一、冒泡排序(Bubble Sort)

核心思想

相邻元素两两比较,若前小后大则交换,大数逐步向前冒泡上浮,每一轮确定一个末尾有序元素。

复制代码
// 数组arr,n个元素,降序排列
void bubbleSort(int arr[], int n) 
{
    int i, j, temp;
    // 共需要 n-1 轮排序
    for (i = 0; i < n - 1; i++) 
    {
        // 每轮减少i次比较,后面已有序不用管
        for (j = 0; j < n - 1 - i; j++) 
        {
            // 前 < 后 就交换,实现降序
            if (arr[j] < arr[j + 1]) 
            {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

二、选择排序(Selection Sort)

核心思想

每一轮先假设当前位置为最大值下标,向后遍历找到真正最大值下标,再交换到当前位置,依次确定前面有序元素。

复制代码
// 数组arr,n个元素,降序排列
void selectionSort(int arr[], int n) 
{
    int i, j, maxIdx, temp;
    for (i = 0; i < n; i++) 
    {
        maxIdx = i;  // 初始假设当前下标为最大值下标
        // 向后寻找更大值的下标
        for (j = i + 1; j < n; j++) 
        {
            if (arr[j] > arr[maxIdx]) 
            {
                maxIdx = j;
            }
        }
        // 把最大值交换到i位置
        temp = arr[i];
        arr[i] = arr[maxIdx];
        arr[maxIdx] = temp;
    }
}

三、插入排序(Insertion Sort)

核心思想

把数组分成已排序区间未排序区间,逐个取出未排序元素,向前比较,比它小的元素向后挪动,腾出位置后插入。

复制代码
// 数组arr,n个元素,降序排列
void insertionSort(int arr[], int n) 
{
    int i, j, temp;
    // 从第二个元素开始往前插入
    for (i = 1; i < n; i++) 
    {
        temp = arr[i];  // 暂存当前要插入的元素
        j = i - 1;
        // 前面元素比temp小,全部后移
        while (j >= 0 && arr[j] < temp) 
        {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = temp;  // 插入到正确位置
    }
}

四、三大排序核心速记对照表

表格

排序算法 核心动作 关键代码行(降序)
冒泡排序 相邻交换,大数上浮 if (arr[j] < arr[j+1]) 交换
选择排序 选最大值,放至最前 if (arr[j] > arr[maxIdx]) 更新maxIdx
插入排序 取数后移,插入空位 while (j>=0 && arr[j]<temp) 元素后移

五、总结

  1. 三种算法都是简单直观的基础排序,适合初学者理解排序逻辑;
  2. 模板为通用降序版本,只需改判断符号即可转为升序;
  3. 做题、考试、课程设计可直接复制代码使用,无需重复改写;
  4. 记忆重点:记准核心思想 + 关键判断条件,就能默写代码。

如果这篇模板对你有帮助,欢迎点赞 + 收藏 + 关注,后续会持续更新 C 语言入门干货、算法模板与编程技巧,助力你高效备考、快速写代码!

相关推荐
JieE21211 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack2019 小时前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树20 小时前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2122 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2122 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术2 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050732 天前
(一)小红的数组操作
算法·编程语言
怕浪猫2 天前
Electron 系列文章封面图
算法·架构·前端框架