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

相关推荐
罗超驿1 小时前
3.快乐数专题学习笔记——双指针法在LeetCode 202题中的应用
java·算法·leetcode·职场和发展
无限进步_1 小时前
【C++】深入底层:自己动手实现一个哈希表
开发语言·数据结构·c++·算法·链表·散列表·visual studio
_深海凉_1 小时前
LeetCode热题100-小于 n 的最大数(字节高频题)
算法·leetcode·职场和发展
小雅痞1 小时前
[Java][Leetcode middle] 36. 有效的数独
java·算法·leetcode
cen__y1 小时前
Linux10(计算机网络01)
linux·运维·服务器·c语言·计算机网络·ubuntu
paeamecium1 小时前
【PAT甲级真题】- General Palindromic Number(20)
数据结构·c++·算法·pat考试·pat
北顾笙9802 小时前
day43-数据结构力扣
数据结构·算法·leetcode
sali-tec2 小时前
C# 基于OpenCv的视觉工作流-章69-圆弧测量
图像处理·人工智能·opencv·算法·计算机视觉
爱编码的小八嘎2 小时前
c语言完美演绎9-26
c语言