当前位置: 首页 > news >正文

排序算法——插入排序

一、插入排序概念

直接插入排序(Insertion Sort)是一种简单的排序算法,它的工作原理类似于人们手动排序卡片的方式。该算法通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

二、插入排序原理

1. 初始化:将数组的第一个元素视为已排序的部分。

2. 遍历:从第二个元素开始,每次选择一个元素,将其插入到已排序部分的适当位置。

3. 比较和移动:为了找到新元素的正确位置,从后向前比较新元素与已排序部分的元素,如果新元素较小,则将较大的元素向后移动一位。

4. 重复:重复上述过程,直到所有元素都被插入到已排序部分。

三、代码示例

#include <stdio.h>void insertionSort(int *arr, int size)
{int key = 0;int i, j;for (i = 1; i < size; i++){key = arr[i];               /*当前待插入的元素*/for (j = i - 1; arr[j] > key && j >= 0; j--)  /*将大于key的元素向后移动一位*/{arr[j + 1] = arr[j];}arr[j + 1] = key;}
}void print(int *arr, int size)
{for (int i = 0; i < size; i++){printf("%d ", arr[i]);}printf("\n");
}int main()
{int arr[] = {5, 4, 2, 3, 1, 6, 0};int size = sizeof(arr) / sizeof(int);printf("插入排序前的数组:");print(arr, size);printf("插入排序后的数组:");insertionSort(arr, size);print(arr, size);return 0;
}

运行结果:

 

四、插入排序复杂度

时间复杂度

最好情况:当输入数组已经是排序好的时候,时间复杂度为O(n)。

平均情况和最坏情况:当输入数组是随机或逆序的时候,时间复杂度为O(n²)。

空间复杂度

直接插入排序是原地排序算法,空间复杂度为O(1)。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • “华为杯”第十六届中国研究生数学建模竞赛-C题:视觉情报信息分析
  • rust pin_project的使用
  • 算法经典题目:Insert Interval
  • 深入了解HTML链接:从基础到进阶——WEB开发系列06
  • C# 不使用 `async` 和 `await` 的常见场景
  • STC-ISP升级MCU
  • HCIE学习笔记:IPV6 地址、ICMP V6、NDP 、DAD (更新补充中)
  • 【路由器】RT-AC88U华硕配置DNS
  • 博客标题: 在 Spring Boot 中使用策略模式实现灵活的订单处理
  • 经纬恒润荣获小米汽车优秀质量奖!
  • SpringBoot统一功能处理——统一数据返回格式
  • 卷积神经网络 - 卷积神经网络与深度学习的历史篇
  • Python学习笔记(六)
  • 云存储技术:HBase HDFS 无感知迁移方案
  • cmake 编译教程
  • 深入了解以太坊
  • 230. Kth Smallest Element in a BST
  • Android单元测试 - 几个重要问题
  • ECS应用管理最佳实践
  • iOS编译提示和导航提示
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Java-详解HashMap
  • PermissionScope Swift4 兼容问题
  • Ruby 2.x 源代码分析:扩展 概述
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • windows-nginx-https-本地配置
  • 包装类对象
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 高性能JavaScript阅读简记(三)
  • 后端_ThinkPHP5
  • 回顾 Swift 多平台移植进度 #2
  • 利用DataURL技术在网页上显示图片
  • 每天10道Java面试题,跟我走,offer有!
  • 全栈开发——Linux
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 收藏好这篇,别再只说“数据劫持”了
  • Spring第一个helloWorld
  • ​Java基础复习笔记 第16章:网络编程
  • #QT 笔记一
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (C11) 泛型表达式
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (javascript)再说document.body.scrollTop的使用问题
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (四)软件性能测试
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (万字长文)Spring的核心知识尽揽其中
  • (转)【Hibernate总结系列】使用举例
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET 4.0中使用内存映射文件实现进程通讯