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

数据结构之希尔排序

1、希尔排序

希尔排序是一种基于插入排序的算法,通过比较相距一定间隔的元素来工作,然后逐渐减少这个间隔,直到它变为1,此时算法退化为简单插入排序,但此时,大部分元素已经是基本有序的,所以最后的插入排序效率很高。

2、希尔排序说明与举例

希尔排序是一种基于插入排序的高效排序算法。它通过比较相距一定间隔的元素来工作,然后逐渐减少这个间隔,直到变为1,此时算法退化为简单插入排序。由于前期预排序的效果,最后的插入排序效率很高。

举例:
给定数组 [64, 34, 25, 12, 22, 11, 90],进行希尔排序。

选择一个增量序列,例如 [n/2],初始增量设为3。
根据增量将数组分为若干子序列:[64, 25, 11], [34, 12, 90], [22]。
对每个子序列进行插入排序:[11, 25, 64], [12, 34, 90], [22]。
减少增量,例如设为1,此时整个数组作为一个子序列:[11, 25, 64, 12, 34, 90, 22]。
对整个数组进行插入排序,得到最终结果:[11, 12, 22, 25, 34, 64, 90]。

3、图形说明希尔排序的过程

初始数组: [64, 34, 25, 12, 22, 11, 90]

增量设为3,分为子序列:
[64, 25, 11] [34, 12, 90] [22]
对每个子序列进行插入排序:
[11, 25, 64] [12, 34, 90] [22]

合并子序列,得到新的数组:
[11, 25, 64, 12, 34, 90, 22]

减少增量为1,整个数组作为一个子序列:
[11, 25, 64, 12, 34, 90, 22]
对这个子序列进行插入排序,得到最终结果:
[11, 12, 22, 25, 34, 64, 90]

在这个图形说明中,我们通过将数组划分为不同的子序列,并对每个子序列进行插入排序,来逐步展示希尔排序的过程。随着增量的减少,子序列的数量逐渐增加,直到最后整个数组作为一个子序列进行插入排序,得到最终的有序数组。


http://www.kler.cn/news/315493.html

相关文章:

  • 轻代码的概念学习笔记
  • http和https的区别及get和post请求的区别
  • Vue3新组件transition(动画过渡)
  • Java API 之集合框架进阶
  • 软件测试面试题(5)——二面(游戏测试)
  • 【PLW003】设备器材云端管理平台v1.0(SpringBoot+Mybatis+NodeJS+MySQL前后端分离)
  • LeetCode题练习与总结:回文链表--234
  • [JavaEE]———进程、进程的数据结构、进程的调度
  • 【优选算法之二分查找】No.5--- 经典二分查找算法
  • Linux之实战命令03:stat应用实例(三十七)
  • 如何使用 maxwell 同步到 redis?
  • 如何在 CentOS 中管理用户、组和服务状态
  • git pull的merge和rebase模式
  • Spring解决循环依赖的原理
  • RuntimeError: Maximum Recursion Depth Exceeded - 递归深度超限的完美解决方案
  • Spring 源码分析
  • C++独立开发开源大数计算库 CBigNum
  • MySQL之内置函数
  • 【笔记】第三节 组织与性能
  • 搜维尔科技:Unity中的A.R.T.测量工具
  • 金仓数据库 KingbaseES参考手册 (8. 函数(九))
  • C++标准库容器类——string类
  • KTH5762系列 低功耗、高精度 3D 霍尔角度传感器 电子手表旋钮应用
  • 机器翻译之Bahdanau注意力机制在Seq2Seq中的应用
  • 【计网】从零开始掌握序列化 --- JSON实现协议 + 设计 传输\会话\应用 三层结构
  • 对时间序列SOTA模型Patch TST核心代码逻辑的解读
  • 基于区块链的相亲交易系统源码解析
  • vue3 本地windows下的字体的引用
  • 分布式锁优化之 使用lua脚本改造分布式锁保证判断和删除的原子性(优化之LUA脚本保证删除的原子性)
  • FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频