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

(3) 插入排序

一 插入排序

1.1 插入排序

插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中, 从而得到一个新的有序表,该表中的已排序数据数目加1。

1.2 插入排序实现

func InsetionSort(arr []int) {if arr == nil || len(arr) < 2 {fmt.Println("数组不满足要求")return}// 0位置时,只有1个元素,我们认为他已经是有序的for i := 1; i <= len(arr)-1; i++ {// 若当前元素比前一个元素小,查看 i 位置的元素应该插入到 0-(i-1)位置的何处if arr[i] < arr[i-1] {temp := arr[i]for j := i; j >= 0; j-- {if j > 0 && arr[j-1] > temp {arr[j] = arr[j-1]} else {arr[j] = tempbreak}}}}
}

1.3 插入排序优化:二分搜索插入

插入位置可以利用二分查找法来快速寻找

二 插入排序复杂度

逆序对:数组 [2,3,8,6,1] 的逆序对为 <2,1> < 3,1> <8,1> <8,6> <6,1>

插入排序的时间复杂度与逆序对的数量成正比关系:

  • 最坏情况、平均时间复杂度都是O(n^2)
  • 最好情况:已经排序的数据,即逆序对数量为0,时间复杂度为O(n)

贴士:大多情况下,快排是很快的,但是当数据量较小时,插入排序的性能很可能比快排还要高。


http://www.mrgr.cn/news/17026.html

相关文章:

  • 个人笔记总结
  • minio最新源码编译(处理安全扫描中跨域访问、.js.map等不安全问题) 版本:RELEASE.2024-06-26T01-06-18Z
  • SOMEIP_ETS_076: Wrong_Method_ID
  • 随笔1:数学建模与数值计算
  • 报错记录3:imx6ull适配ov2640摄像头无法获取默认摄像头分辨率与格式参数
  • 深入探讨Java JSON解析与HTML标签清除:详解与实例
  • p2p、分布式,区块链笔记: Merkle-DAG和Merkle-Tree的区别与联系
  • 编译原理简介
  • 滑动窗口系列(不定长滑动窗口长度) 9/1
  • 据传:英特尔正考虑剥离制造代工部门
  • 实战项目:俄罗斯方块(一)
  • ubuntu架设FRPC 服务器端方法
  • 基于自适应狮群算法优化GRU神经网络进水量预测,gsclst-gru进水量预测,基于黄金正弦改进的狮群算法优化GRU进水量预测
  • 华为OD机试真题 - 字符成环找偶数O - 滑动窗口(Java/Python/JS/C/C++ 2024 E卷 100分)
  • 创建表与删除表
  • 百度飞浆目标检测PPYOLOE模型在PC端、Jetson上的部署(python)
  • Python知识点:如何使用Jenkins与Python进行CI/CD集成
  • MySQL——事务与存储过程(二)存储过程的创建(3)定义条件和处理程序
  • 信息学奥赛初赛天天练-81-NOIP2015普及组-完善程序-二分答案、二分查找、中位数、二分边界、二分时间复杂度
  • Redis(13)| 主从复制