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) ❌

五、下篇预告

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


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

相关推荐
YLCHUP6 小时前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
思麟呀6 小时前
背包DP(01背包+完全背包)
c++·算法
笑容掩饰我的失落7 小时前
区块链从小白到精通(七):Solidity 语法精讲——数据类型、函数、修饰器与事件
算法·区块链·php·智能合约·哈希算法
Pniubi8 小时前
力扣24. 两两交换链表中的节点(递归)
算法·leetcode·链表
nice_lcj5208 小时前
LRU 缓存入门:它是什么、怎么用、面试怎么手写
java·数据结构·缓存·面试·lru
꧁细听勿语情꧂9 小时前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序
c语言·开发语言·数据结构·算法
俊俊几年的9 小时前
动态规划(Dynamic Programming)详解:从入门到 LeetCode Hot 100
linux·c++·算法·leetcode·嵌入式·动态规划·c
小雉系统18 小时前
BcoreOS安全通信架构:FsSession 抗算法后门安全设计
算法·安全·架构
Pniubi21 小时前
关于算法用现成数据结构和手撕
数据结构