当前位置: 首页 > 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/a/315493.html

相关文章:

  • 基于RK3568J多网口电力可信物联网关解决方案
  • git入门环境搭建
  • Mysql数据库里的SSH连接
  • 大数据新视界 -- 大数据大厂之 Impala 性能飞跃:动态分区调整的策略与方法(上)(21 / 30)
  • 软件测试:测试用例详解
  • Could not initialize class sun.awt.X11FontManager
  • 轻代码的概念学习笔记
  • 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.测量工具