C语言插入排序算法详解及完整代码实现

键盘旁的猫
键盘旁的猫
发布时间:2026-10-13 | 2人浏览过
原创

插入排序是C语言中最基础的排序算法之一。它通过构建有序序列,对未排序数据逐个插入到合适位置,最终完成整个数组的从小到大排序。本文将图解其核心思想,并提供可直接运行的C语言代码实现。

算法核心思想

插入排序的基本逻辑是将一个无序的数组划分为两个部分:

  • 已排序子数组:初始时仅包含第一个元素。
  • 待插入元素:从第二个元素开始,依次遍历剩余元素。

算法的核心在于将“待插入元素”放入“已排序子数组”中的正确位置。在放置过程中,需要将已排序区间中大于该元素的数据向右移动,腾出空间。这个过程重复直到所有元素都被处理完毕。

具体执行步骤演示

为了直观理解,我们以数组 [3, 2, 4, 1] 为例,说明从小到大排序的三轮操作过程:

第1轮:处理元素 2

  1. 初始状态:[3] 为已排序部分,[2, 4, 1] 为待插入部分。
  2. 比较:2 小于 3,需要向前移动。
  3. 插入:将 3 后移,把 2 插入到索引 0 的位置。
  4. 结果:[2, 3] 已排序,剩余 [4, 1]。

第2轮:处理元素 4

  1. 初始状态:已排序 [2, 3],待插入 [4, 1]。
  2. 比较:4 大于 3,无需移动。
  3. 插入:4 已经处于正确位置。
  4. 结果:[2, 3, 4] 已排序,剩余 [1]。

第3轮:处理元素 1

  1. 初始状态:已排序 [2, 3, 4],待插入 [1]。
  2. 比较:1 小于 4、3 和 2,需要移动到最前。
  3. 插入:将 2、3、4 全部向后移动一位,将 1 放在索引 0。
  4. 结果:[1, 2, 3, 4],排序结束。

C语言代码实现

以下是完整的C语言实现代码。代码中使用了 #define N 8 定义数组长度,并提供了详细的行级注释以便理解参数传递和循环逻辑。

#include <stdio.h>
#include <stdlib.h>
#define N 8

// 函数声明:a为数组指针,n为数组元素个数
void insert_sort(int a[], int n);

// 插入排序实现(从小到大)
void insert_sort(int a[], int n)
{
    // 外层循环:从第1个索引开始,逐个处理后续元素
    for (int i = 1; i < n; i++)
    {
        // 确定当前待插入元素 a[i] 应该去的正确位置 j
        int j = 0;
        while ((a[j] < a[i]) && (j < i))
        {
            j++;
        }

        // 如果当前位置 i 不是应插位置 j,则需要移位
        if (i != j)
        {
            int temp = a[i]; // 暂存待插入元素

            // 内部循环:将 [j, i-1] 区间的元素整体后移一位
            for (int k = i; k > j; k--)
            {
                a[k] = a[k - 1];
            }
            // 将暂存的元素放入空出的位置 j
            a[j] = temp;
        }
    }
}

int main()
{
    int num[N] = {89, 38, 11, 78, 96, 44, 19, 25};

    // 调用排序函数
    insert_sort(num, N);

    // 打印排序后的结果
    for (int i = 0; i < N; i++)
    {
        printf("%d ", num[i]);
    }
    printf("\n");

    system("pause");
    return 0;
}

算法特性总结

插入排序具有以下几个关键特点:

  • 稳定性:它是一种稳定的排序算法。如果在排序过程中遇到相等元素,新元素会排在原相等元素的后面,不会改变它们原有的相对顺序。
  • 时间复杂度:平均和最坏情况下为 $O(N^2)$,最好情况(数组已有序)为 $O(N)$。
  • 适用场景:适合数据量较小或基本有序的排序场景。对于大规模无序数据,效率不如快速排序或归并排序。

以上就是关于C语言插入排序算法的详细解析与代码示例,更多关于基础算法的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表