C语言:插入排序

插入排序

  • 1.解释
  • 2.步骤
  • 3.举例分析
    • 示例
    • 结果
    • 分析

1.解释

插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序)。

2.步骤

  1. 从第一个元素开始,该元素可以认为已经排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置后
  6. 重复步骤2~5
    如果排序序列是链表结构,插入排序可以实现在O(1)空间复杂度内完成排序。

3.举例分析

示例

c 复制代码
#include <stdio.h>
// 插入排序函数
void in(int arr[], int n) {
    int i, k, j;
    for (i = 1; i < n; i++) {
        k = arr[i];
        j = i - 1;
        // 将arr[0...i-1]中比k大的元素向后移动
        while (j >= 0 && arr[j] > k) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = k;
    }
}
// 用来打印数组的函数
void print(int arr[], int size) {
    int i;
    for (i = 0; i < size; i++)
        printf("%d ", arr[i]);
    printf("\n");
}
// 主函数来演示排序过程
int main() {
    int arr[] = {12, 11, 13, 5, 6};
    int n = sizeof(arr)/sizeof(arr[0]);
    in(arr, n);
    print(arr, n);
    return 0;
}

结果

分析

这段代码首先定义了一个in函数,它接受一个整数数组和数组的长度。在in函数中,通过一个for循环来遍历数组中的每个元素,将每个元素插入到已排序部分的正确位置。print函数则用于打印排序后的数组。

插入排序在小规模数据或者基本有序的数据面前,这是一个非常有效的排序算法。在最好的情况下,即输入数组已经是排序好的。

相关推荐
稚南城才子,乌衣巷风流24 分钟前
支配树(Dominator Tree)详解:概念、算法与应用
算法
稚南城才子,乌衣巷风流1 小时前
动态开点:原理、实现与应用场景
数据结构·算法
yyds_yyd_100861 小时前
1464. 数组中两元素的最大乘积(2026.07.27)
数据结构·c++·算法·leetcode
KaMeidebaby2 小时前
卡梅德生物技术快报 | 核酸适配体文库测序:核酸适配体文库测序的技术原理、实验流程与数据解析
前端·网络·数据库·人工智能·算法
geovindu3 小时前
CSharp: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·算法·c#·.net·搜索算法
ekkoalex4 小时前
训练框架以及算法实现的框架
算法
躺柒4 小时前
读半导体简史08大型机
linux·服务器·c语言·数据库·unix·ibm
DFT计算杂谈4 小时前
交错磁研究进展材料物性与交叉应用
数据库·人工智能·python·opencv·算法
十月的皮皮4 小时前
STM32从零到量产开发:四路继电器工业控制模块开发— 继电器模块bsp_di.h与 bsp_di.c文件
c语言·stm32·stm32cubemx·hal库
玖玥拾4 小时前
LeetCode 26 删除有序数组中的重复项
算法·leetcode