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函数则用于打印排序后的数组。

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

相关推荐
梭七y10 分钟前
【力扣hot100题】(063)搜索二维矩阵
算法·leetcode·职场和发展
哦吼!28 分钟前
算法基础-枚举
算法
重生之我要成为代码大佬31 分钟前
从零讲透DFS-深度优先搜索-2(排序与组合)
开发语言·python·算法·深度优先遍历
双叶83638 分钟前
(51单片机)独立按键控制流水灯LED流向(独立按键教程)(LED使用教程)
c语言·开发语言·数据结构·单片机·嵌入式硬件·游戏·51单片机
uhakadotcom1 小时前
快速理解 tiktoken:OpenAI 模型的高效 BPE 分词器
算法·面试·github
鲸鱼宝宝成长记1 小时前
[蓝桥杯青少年组省赛 2024] 通关游戏的最少能量值
数据结构·算法
upward_growth1 小时前
一叶障目 -- 你不知道的"最长递增子序列"!
前端·javascript·算法
半间烟雨1 小时前
Web3(阶段一:入门)——哈希算法
算法·web3·区块链·哈希算法
@蓝莓果粒茶1 小时前
LeetCode第131题_分割回文串
开发语言·前端·算法·leetcode·职场和发展·c#·.net
雾里看山1 小时前
算法思想之滑动窗口(一)
算法·leetcode·推荐算法