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

河南建设安全监督网站WordPress集成tipask

河南建设安全监督网站,WordPress集成tipask,江西网站建设哪家公司好,高端营销型网站建设品牌本系列可作为算法学习系列的笔记,小编会将代码记录下来,大家复制下来就可以练习了,方便大家学习。小编作为新晋码农一枚,会定期整理一些写的比较好的代码,作为自己的学习笔记,会试着做一下批注和补充&#…

本系列可作为算法学习系列的笔记,小编会将代码记录下来,大家复制下来就可以练习了,方便大家学习。小编作为新晋码农一枚,会定期整理一些写的比较好的代码,作为自己的学习笔记,会试着做一下批注和补充,如转载或者参考他人文献会标明出处,非商用,如有侵权会删改!欢迎大家斧正和讨论!

系列文章目录 

计算矩阵的鞍点个数

算法-比较排序


目录

系列文章目录 

​​一、比较排序算法概述​​

1. 梳排序(Comb Sort)​​

​​2. 堆排序(Heap Sort)​​

​​3. 归并排序(Merge Sort)​​

​​4. 快速排序(Quick Sort)​​

​​5. 内省排序(Introsort)​​

​​6. Timsort​​

​​总结对比​​

总结


​一、比较排序算法概述​

比较排序是指通过比较元素大小来决定排序顺序的算法,大多数排序算法都属于比较算法。在比较排序中,待排序对象可以是任意数据类型。其时间复杂度下界为 ​​O(n log n)​​。常见的比较排序算法包括:梳排序、堆排序、归并排序、快速排序、内省排序和Timsort。

这里为什么比较排序的时间复杂度下界为​​O(n log n)​​, 详见小编的另一个笔记链接:

为什么比较排序算法的时间复杂度下界是 Ω(n log n)?​-CSDN博客

1. 梳排序(Comb Sort)​

​算法思想:​​ 改进的冒泡排序,通过较大的间隔(gap)逐步缩小来减少逆序对。
​时间复杂度:​

  • 平均 ​​O(n²)​​,但优化后可达 ​​O(n log n)​​(使用Shrink Factor ≈1.3)。
    ​稳定性:​​ 不稳定。

​练习题目:​
​输入数组:​[8, 4, 1, 3, 2, 7, 6, 5]
​排序过程:​

  1. 初始 gap = 8 / 1.3 ≈ 6 → 比较 [8,6] → 交换 → [6,4,1,3,2,7,8,5]
  2. gap = 6 / 1.3 ≈ 4 → 比较 6-2,4-7,1-8,3-5 → 交换 1-8[6,4,5,3,2,7,1,8]
  3. gap = 4 / 1.3 ≈ 3 → 比较 6-3,4-2,5-7 → 交换 6-3,4-2[3,2,5,6,4,7,1,8]
  4. gap = 3 / 1.3 ≈ 2 → 比较 3-5,2-6,5-4,6-7,4-1,7-8 → 交换 5-4,4-1[3,2,4,6,1,7,5,8]
  5. gap = 2 / 1.3 ≈ 1 → 进行冒泡排序 → 最终 [1,2,3,4,5,6,7,8]

​结果:​[1, 2, 3, 4, 5, 6, 7, 8]

​2. 堆排序(Heap Sort)​

​算法思想:​​ 利用最大堆(或最小堆)结构,每次取出堆顶元素并调整堆。
​时间复杂度:​

  • 建堆 ​​O(n)​​,每次调整 ​​O(log n)​​ → 总体 ​​O(n log n)​​。
    ​稳定性:​​ 不稳定。

​练习题目:​
​输入数组:​[8, 4, 1, 3, 2, 7, 6, 5]
​排序过程:​

  1. 建堆(最大堆):[8,5,7,4,2,1,6,3]
  2. 交换 8(堆顶)和 3(末尾),调整堆 → [7,5,6,4,2,1,3|8]
  3. 交换 73[6,5,3,4,2,1|7,8]
  4. 重复操作 → 最终 [1,2,3,4,5,6,7,8]

​结果:​[1, 2, 3, 4, 5, 6, 7, 8]

​3. 归并排序(Merge Sort)​

​算法思想:​​ 分治法,递归拆分数组,再合并有序子数组。
​时间复杂度:​​ ​​O(n log n)​​(最坏、平均、最优)。
​稳定性:​​ 稳定。

​练习题目:​
​输入数组:​[8, 4, 1, 3, 2, 7, 6, 5]
​排序过程:​

  1. 拆分:[8,4,1,3][2,7,6,5]
  2. 递归拆分 → [8,4] [1,3] [2,7] [6,5]
  3. 合并:[4,8] [1,3] [2,7] [5,6]
  4. 继续合并 → [1,3,4,8][2,5,6,7]
  5. 最终合并 → [1,2,3,4,5,6,7,8]

​结果:​[1, 2, 3, 4, 5, 6, 7, 8]

​4. 快速排序(Quick Sort)​

​算法思想:​​ 分治法,选取基准(pivot),划分左右子数组递归排序。
​时间复杂度:​

  • 平均 ​​O(n log n)​​,最坏 ​​O(n²)​​(如已排序数组)。
    ​稳定性:​​ 不稳定。

​练习题目:​
​输入数组:​[8, 4, 1, 3, 2, 7, 6, 5]
​排序过程(取第一个元素为pivot):​

  1. pivot=8 → 划分 [4,1,3,2,7,6,5] + []
  2. pivot=4 → [1,3,2] + [7,6,5]
  3. pivot=1 → [] + [3,2]
  4. pivot=3 → [2] + []
  5. 合并 → [1,2,3,4,5,6,7,8]

​结果:​[1, 2, 3, 4, 5, 6, 7, 8]

​5. 内省排序(Introsort)​

​算法思想:​​ 结合快速排序、堆排序和插入排序,避免快速排序的最坏情况。
​时间复杂度:​​ ​​O(n log n)​​(最坏情况由堆排序保证)。
​稳定性:​​ 不稳定。

​练习题目:​
​输入数组:​[8, 4, 1, 3, 2, 7, 6, 5]
​排序过程:​

  1. 快速排序递归到一定深度(如 log n)→ 改用堆排序
  2. 最终结果与堆排序相同

​结果:​[1, 2, 3, 4, 5, 6, 7, 8]

​6. Timsort​

​算法思想:​​ 归并排序 + 插入排序优化,适用于现实数据(部分有序)。
​时间复杂度:​​ ​​O(n log n)​​(最坏),对部分有序数据接近 ​​O(n)​​。
​稳定性:​​ 稳定。

​练习题目:​
​输入数组:​[8, 4, 1, 3, 2, 7, 6, 5]
​排序过程:​

  1. 分块(run):[8] [4] [1,3] [2,7] [6] [5]
  2. 插入排序优化小run → [1,3] [2,7]
  3. 归并合并 → [1,2,3,7] + [4,5,6,8]
  4. 最终合并 → [1,2,3,4,5,6,7,8]

​结果:​[1, 2, 3, 4, 5, 6, 7, 8]

​总结对比​

算法平均时间复杂度最坏时间复杂度稳定性适用场景
梳排序O(n²)O(n²)不稳定改进冒泡排序
堆排序O(n log n)O(n log n)不稳定内存受限场景
归并排序O(n log n)O(n log n)稳定大数据量、外部排序
快速排序O(n log n)O(n²)不稳定通用高效排序
内省排序O(n log n)O(n log n)不稳定避免快排退化
TimsortO(n log n)O(n log n)稳定实际数据(如Python、Java)

​练习题目结果均为:​[1, 2, 3, 4, 5, 6, 7, 8]


总结

本文介绍了6种常见比较排序算法:梳排序(改进冒泡排序,平均O(n²))、堆排序(利用堆结构,O(nlogn))、归并排序(分治合并,稳定O(nlogn))、快速排序(基于pivot划分,平均O(nlogn))、内省排序(结合快排和堆排)以及Timsort(归并+插入优化,适合现实数据)。通过示例数组[8,4,1,3,2,7,6,5]演示各算法执行过程,最终均输出有序结果[1,2,3,4,5,6,7,8]。文章对比了各算法的时间复杂度、稳定性和适用场景,可作为算法学习参考笔记。

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

相关文章:

  • Taro 自定义tab栏和自定义导航栏
  • 辛格迪客户案例 | 迈威生物电子合约(eSignDMS)项目
  • 《微信小程序》第七章:TabBar设计
  • 国外做外链常用的网站网站 建设 网站设计公司
  • Flutter package 内部加载该包的 assets 时,需要使用 packages/ 前缀
  • 5 种简单方法将文件从 Mac 传输到 iPhone
  • ETH, Lwip,Tcp之间关系
  • 神经网络之向量相似性
  • 关于前端文件处理-实战篇
  • <script setup lang=“ts“>+uniapp实现轮播(swiper)效果
  • 网站建设与设计方案现在什么网页游戏最好玩最火
  • SOME/IP 序列化问题
  • 【Rust编程:从新手到大师】 Rust 所有权与内存安全
  • wordpress如何添加背景音乐seo点评类网站
  • Flink Keyed State 详解之二
  • AI IN ALL王炸霸屏|战神数科与腾讯字节等深度践行AI
  • 【技术干货】在Stimulsoft中使用Google Sheets作为数据源创建报表与仪表盘
  • PCIe协议之唤醒篇之 WAKE# 信号
  • 搜狗做网站怎么样做静态网站有什么用
  • 潍坊网站建设公司哪家好大庆+网站建设
  • 推理成本吞噬AI未来,云计算如何平衡速度与成本的难题?
  • 基于VaR模型的ETF日内动态止损策略实现与理论验证
  • Linux云计算基础篇(28)-Samba文件服务
  • 学习经验分享【42】数学建模大赛参赛经历
  • 5.3 大数据方法论与实践指南-存储成本优化(省钱)
  • 运营商网站服务密码搜索引擎优化seo信息
  • 【案例实战】鸿蒙元服务开发实战:从云原生到移动端,包大小压缩 96% 启动提速 75% 的轻量化设计
  • 网站开发人员介绍网络营销研究现状文献综述
  • html5制作网站一个网站建立团队大概要多少钱
  • AceContainer类中用于初始化任务执行系统的核心方法--AceContainer::InitializeTask