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

相关推荐
kk_net88991 分钟前
FSNotes:macOS 和 iOS 上的开源笔记管理器
笔记·其他·macos·ios
FPGA信号处理4 分钟前
【 凸优化】第六讲:求解器与支持向量机
算法·机器学习·支持向量机
专注仿真6 分钟前
支持向量机(SVM)算法详解与代码实例
算法·机器学习·支持向量机
Pniubi9 分钟前
力扣42接雨水(动态规划法)
算法·leetcode·职场和发展
CQU_JIAKE25 分钟前
10.31[A]
算法·深度优先
zwc321043205529 分钟前
Day 5:threshold与inRange阈值分割
c++·图像处理·人工智能·opencv·算法·计算机视觉
云-缩影32 分钟前
实际项目中怎么选排序算法:从面试题到工程落地
java·算法·排序算法
可乐_不渴34 分钟前
# C语言文件操作全解析:从 fopen 到 fclose,一文吃透文件 IO
linux·服务器·c语言
Pniubi44 分钟前
力扣46全排列(回溯(递归))
算法·leetcode·职场和发展
ZhengEnCi10 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构