19-插入排序与希尔排序

C语言数据结构系列:插入排序篇

C语言数据结构系列(十九):插入排序与希尔排序

🎯 本篇目标 :掌握插入排序和希尔排序!

📝 摘要 :本文介绍两种经典的排序算法------插入排序 与希尔排序。插入排序通过将新元素插入到已排序序列的正确位置完成排序,思想类似打扑克牌;希尔排序则是插入排序的改进版,通过分组、逐步缩小间隔的方式提升效率。文章包含两种算法的 C 语言实现、思想讲解及复杂度对比,适合初学者快速掌握。


一、前言

哈喽小伙伴们!👋

今天我们来学习插入排序 和它的改进版希尔排序!


二、插入排序

2.1 思想

💡 像打扑克牌,每次摸到新牌,插入到手牌的正确位置

2.2 代码实现

c 复制代码
void insertionSort(int arr[], int n) {
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}

三、希尔排序

3.1 思想

💡 分组插入排序,逐步缩小间隔,最后进行一次插入排序

3.2 代码实现

c 复制代码
void shellSort(int arr[], int n) {
    for (int gap = n / 2; gap > 0; gap /= 2) {
        for (int i = gap; i < n; i++) {
            int temp = arr[i];
            int j;
            for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
                arr[j] = arr[j - gap];
            }
            arr[j] = temp;
        }
    }
}

四、复杂度对比

算法 最好 最坏 平均 稳定性
插入 O(n) O(n²) O(n²) ✅
希尔 O(nlogn) O(n²) O(n^1.3) ❌

五、下篇预告

下一篇我们将学习 快速排序------最常用的排序算法!


💡 插入排序在数据基本有序时效率很高!👍

相关推荐
木井巳16 分钟前
【动态规划: 线性dp】解码方法
java·算法·leetcode·动态规划·推荐算法
春弦_8 小时前
自用算法整理二
数据结构·算法·图论
hetao17338379 小时前
2026-10-22~23 hetao1733837 的刷题记录
c++·算法
java_nnnn9 小时前
LeetCode刷题滑动窗口(串联所有单词的子串+最小覆盖的子串)Java
算法·leetcode·职场和发展
Navigator_Z10 小时前
LeetCode //C - 1301. Number of Paths with Max Score
c语言·算法·leetcode
卡卡~~11 小时前
“101计划”核心课程实践教材《数据实验结构指导-C++语言版》题目集
开发语言·c++·学习·算法
企业数字化笔记11 小时前
AI视频增强后画质怎么验收?插值基线、伪细节与帧间闪烁的检查方法
人工智能·算法·音视频
学逆向的12 小时前
C 内存属性
c语言·开发语言·算法·网络安全
lengxuenong12 小时前
树状数组 · 信息学学习手册1-求和3个模板
c++·学习·算法·青少年编程