当前位置: 首页 > 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)。

http://www.lryc.cn/news/423641.html

相关文章:

  • 重修设计模式-行为型-状态模式
  • 网络安全知识渗透测试
  • 我国卫星互联网产业集群崛起;1000万资金扶持 上海助推产业互联网平台跨越式发展;河南“数据要素×”行动实施方案发布 | 产业互联网观察第179期
  • 《RT-DETR》论文笔记
  • 输出Docker容器的启动命令行脚本
  • Dubbo 快速掌握 这篇就够了
  • 【每日刷题】Day100
  • 网络协议九 应用层 HTTPS
  • 【ArrayList】JDK1.8源码详细注释 以及如何实现线程安全的链表
  • [python]rasterio运行代码警告proj_create_from_database: Cannot find proj.db
  • ThinkPHP5.1.C+CmsEasy-SQL注入
  • Python 绘图进阶之词云图:文本数据的可视化艺术
  • 【Windows】Q-Dir(资源管理器)软件介绍
  • 什么是令牌桶算法?工作原理是什么?使用它有哪些优点和注意事项?
  • C++-类与对象(中上篇)
  • 链表 206.反转链表
  • Ubuntu18.04 配置EtherCAT主站IGH SOEM
  • 航空航天构型管理
  • Visual Studio Code 安装与 C/C++ 语言运行总结
  • Science Robotics 受鳞片启发的可编程机器人结构,可同时进行形状变形和刚度变化
  • SpringBoot 自定义 Starter 实现
  • 「Spring MVC」Session、Cookie
  • Java虚拟机:垃圾回收器
  • ES6-ES13学习笔记
  • 【Qt开发】QtCharts图表——在ui上添加QChartView控件并进行绘图配置
  • Android14 屏幕录制(屏幕投影)和音频播放采集
  • 一行实现88个群智能算法优化混合核极限学习机HKELM的多特征输入单输出的数据回归预测Matlab程序全家桶
  • redis面试(十五)公平锁队列重排
  • python 基础语法os模块
  • 图论------迪杰斯特拉(Dijkstra)算法求单源最短路径。