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 语言入门干货、算法模板与编程技巧,助力你高效备考、快速写代码!

相关推荐
Wang's Blog20 分钟前
PostgreSQL笔记50: 基于PGVECTOR的实时推荐与搜索系统构建
笔记·postgresql
土司大王33 分钟前
LeetCode hot100——相交链表
算法·leetcode·链表
土司大王36 分钟前
LeetCode hot100——回文链表
算法·leetcode·链表
Chester_199942 分钟前
CSP202209.B何以包邮?
c语言·开发语言
caimouse1 小时前
ReactOS 窗口系统分析(13):滚动条 — scrollbar.c + scrollex.c
c语言·开发语言·reactos
sel_91 小时前
【Docker】Docker 安装与使用详解:从零搭建到日常实战
人工智能·深度学习·算法·docker
caimouse4 小时前
ReactOS 窗口系统分析(23):键盘 — keyboard.c + kbdlayout.c
c语言·开发语言·计算机外设
小O的算法实验室9 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
Tbisnic10 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制
Brilliantwxx11 小时前
【算法从零到千】【55-58】哈希位图+常见数学运算 接口
算法