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

新手向 算法 插入排序-yang

今天我们来讲插入排序

插入排序的基本原理

插入排序是一种简单直观的排序算法,通过构建有序序列,对未排序的数据逐个插入到已排序序列的适当位置。其时间复杂度为 O(n^2),适合小规模数据排序。

代码实现

//时间复杂度O(n^2) 空间复杂度O(1) 稳定性:稳定
void Insert_Sort(int arr[], int len)
{//for (int i = 0; i < len-1; i++)//控制跑的趟数:len-1趟for (int i = 1; i < len; i++)//i即代表趟数,也代表这一趟待排序值的下标{//提前干一个事:将带排序的值,拷贝给tmp,防止意外被覆盖掉int tmp = arr[i];int j = i - 1;for ( ; j >= 0; j--)//具体控制这一趟中,已排序好的序列从右至左依次和待排序值进行比较{//比较if (arr[j] > tmp)//如果大于tmp,向后挪动一个位置{arr[j+1] = arr[j];}else//如果小于等于tmp,则停下来{//将tmp挪回去(挪回到停下来的位置的后面break;}}//或者触底,则停下来arr[j + 1] = tmp;}
}

代码说明

  1. 外层循环:从第二个元素开始遍历数组(i = 1),因为第一个元素默认是有序的。
  2. 内层循环:将当前元素 key 与已排序部分的元素从后向前比较,找到合适的插入位置。
  3. 元素移动:如果已排序部分的元素大于 key,则将其后移一位。
  4. 插入操作:最终将 key 插入到正确的位置。

时间复杂度分析

  • 最坏情况:数组是逆序的,每次插入都需要移动所有已排序元素,时间复杂度为 O(n^2)。
  • 最好情况:数组已经有序,每次插入只需比较一次,时间复杂度为 O(n)。
  • 平均情况:时间复杂度为 O(n^2)。

适用场景

插入排序在数据规模较小或部分有序的情况下效率较高,且实现简单。对于大规模数据,更高效的排序算法(如快速排序、归并排序)更合适。

http://www.dtcms.com/a/392725.html

相关文章:

  • 2.0、机器学习-数据聚类与分群分析
  • 无痛c到c++
  • QTableWidget 控件入门
  • 【HarmonyOS】HMRouter配置与基本使用
  • 数据驱动下的实验设计与方差分析:从技术落地到方法论升维
  • 深度学习中的池化、线性层与激活函数
  • 【脑电分析系列】第22篇:EEG情绪识别与脑机接口(BCI)应用案例:机器学习与深度学习的实战
  • 深度学习知识点
  • 【pdf】如何将网页转换为pdf?
  • 家庭劳务智能机器人:从“科幻设想”到“推门而入”还有多远?
  • C++后台开发工具链实战
  • PortAudio--Cross-platform Open-Source Audio I/O Library
  • Oracle根据日期进行查询
  • 【C#】C# 中 `ProcessStartInfo` 详解:启动外部进程
  • Python快速入门专业版(三十六):Python列表基础:创建、增删改查与常用方法(15+案例)
  • 微服务项目->在线oj系统(Java-Spring)----5.0
  • 【读书笔记】《鲁迅传》
  • Python 基础:列表、字符串、字典和元组一些简单八股
  • C++ 运算符重载:类内与类外重载详解
  • 【java】jsp被截断问题
  • 在Windows10 Edge浏览器里安装DeepSider大模型插件来免费使用gpt-4o、NanoBanana等AI大模型
  • 车联网网络安全:技术演进与守护智能出行
  • 网络原理-传输层补充1
  • Amber `rism1d` 深度解析与实战教程
  • vscode在断点旁边写expression让条件为true的时候才触发断点提高调试效率
  • 何时使用RESETLOGS
  • 分布式链路追踪关键指标实战:精准定位服务调用 “慢节点” 全指南(一)
  • vaapi硬解码性能评估
  • 第 N 个泰波那契数
  • 面试经典150题[037]:矩阵置零(LeetCode 73)