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

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

相关推荐
czlczl2002092530 分钟前
算法:二叉树的公共祖先
算法
稚辉君.MCA_P8_Java1 小时前
Gemini永久会员 Java动态规划
java·数据结构·leetcode·排序算法·动态规划
oioihoii1 小时前
C++语言演进之路:从“C with Classes”到现代编程基石
java·c语言·c++
小白程序员成长日记2 小时前
2025.11.23 力扣每日一题
算法·leetcode·职场和发展
16_one2 小时前
autoDL安装Open-WebUi+Rag本地知识库问答+Function Calling
人工智能·后端·算法
散峰而望3 小时前
C++数组(三)(算法竞赛)
开发语言·c++·算法·github
q***95224 小时前
SpringMVC 请求参数接收
前端·javascript·算法
初级炼丹师(爱说实话版)4 小时前
多进程与多线程的优缺点及适用场景总结
算法
hetao17338374 小时前
2025-11-25~26 hetao1733837的刷题记录
c++·算法
历程里程碑4 小时前
各种排序法大全
c语言·数据结构·笔记·算法·排序算法