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

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

相关推荐
zander25810 分钟前
LeetCode 300. 最长递增子序列
算法·leetcode·深度优先
程序员与背包客_CoderZ16 分钟前
高性能分布式KV存储引擎RocksDB入门与C/C++编码实战
c语言·开发语言·数据库·c++·分布式·分布式数据库·rocksdb
william_yangshun30 分钟前
【大模型部署实战】kimi-k3-in-c 中文版:用 176KB 纯 C99 引擎在 CPU 上跑 Kimi K3 上手指南
c语言·开发语言
祖力5544 分钟前
Linux应用软件编程:目录IO与framebuffer
linux·运维·算法·framebuffer·目录io
名字还没想好☜1 小时前
Go 用 slices/maps 标准库泛型函数:告别手写 Contains、Sort、去重(Go 1.21)
开发语言·后端·算法·golang·go
地平线开发者1 小时前
【模型轻量化专题】深度学习模型为什么需要轻量化
算法
_Narcissus_1 小时前
链表算法题和静态链表
数据结构·c++·笔记·算法·链表·ai·力扣
Lyyaoo.2 小时前
【普通数组】【中等】除了自身以外数组的乘积
数据结构·算法·leetcode
threerocks2 小时前
《The AI-Native SDLC Playbook》万字拆解
算法·aigc·ai编程
夏玉林的学习之路2 小时前
算法8.环形队列
算法