可视化希尔排序算法是什么_希尔排序一趟排序的结果

可视化希尔排序算法是什么_希尔排序一趟排序的结果如需转载请标明出处:https://blog.csdn.net/zhuzi9QQ技术交流群:594200841前言概念介绍希尔排序是基于插入排序算法的一种更高效的改进版本。它是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越少,当增量减少至1时,整个文件恰被分成一组。此时算法便终止。原理讲解以[41243421917]这个序列为例说明希尔排序算法的实现原理未开始遍历时,此时效果如下图由上面数组可知

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

如需转载请标明出处:https://blog.csdn.net/zhuzi9
QQ技术交流群:594200841

前言

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

概念介绍

  • 希尔排序是基于插入排序算法的一种更高效的改进版本。
  • 它是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越少,当增量减少至1时,整个文件恰被分成一组。此时算法便终止。

原理讲解

以[41 24 34 2 19 17]这个序列为例说明希尔排序算法的实现原理

  1. 未开始遍历时,此时效果如下图
    在这里插入图片描述
  2. 由上面数组可知,该数组长度为6,我们人为的选择增量为gap=6/2=3,故将整个数组分为3个子数组(颜色相同为一组),分别为[41 2],[24 19],[34 17]。效果如下图
    在这里插入图片描述
  3. 第一次遍历时(增量为3),我们分别对三个子数组进行插入排序,插入排序后3个子数组变为[2 41],[19 24],[17 34]。效果如下图
    在这里插入图片描述
  4. 第二次遍历时(增量为1),我们对整个数组[2 19 17 41 24 34]进行插入排序,插入排序后效果如下图
    在这里插入图片描述
  5. 至此,希尔排序原理讲解完毕。

时间复杂度

由希尔排序的过程可知,该算法的时间复杂度和增量有很大关系。如果增量为1,此时希尔排序就是插入排序;如果增量为Hibbard增量,此时希尔排序算法则明显有别于插入排序;

数据个数 增量为1时最大比较次数
1 0
2 1
3 3
4 6
5 10
10 45
N 1/2N(N-1)

所以根据时间复杂度的概念,当增量为1时希尔排序算法的时间复杂度为O(N^2);
当增量为Hibbard增量时希尔排序算法的时间复杂度为O(N^3/2)(这个留着有兴趣的同学自行证明)

空间复杂度

  • 空间复杂度是对一个算法在运行过程中临时占用存储空间大小的度量。
  • 由于希尔排序算法前后占用空间大小不变,由空间复杂度含义可知,该算法空间复杂度为O(1)

算法优缺点

  • 优点:速度快;移动次数少
  • 缺点:不稳定;增量选择不定,只能根据数据量靠经验选取

效果展示

在这里插入图片描述

源码下载

  • 链接如下https://download.csdn.net/download/zhuzi9/12502742

更多算法学习请关注我的公众号

在这里插入图片描述
如需转载请标明出处:https://blog.csdn.net/zhuzi9
QQ技术交流群:594200841

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186752.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月2日 下午2:00
下一篇 2022年10月2日 下午2:16


相关推荐

  • 常用quartz表达式

    常用quartz表达式0012 每天中午 12 点触发 nbsp 01510 每天上午 10 15 触发 nbsp 01510 每天上午 10 15 触发 nbsp 01510 每天上午 10 15 触发 nbsp 01510 2005 2005 年的每天上午 10 15 触发 nbsp 0 14 在每天下午 2 点到下午 2 59 期间的每 1 分钟触发 nbsp 0

    2026年3月19日
    2
  • java 逻辑或 作用_java逻辑运算符有哪些?逻辑运算符有什么作用?

    java 逻辑或 作用_java逻辑运算符有哪些?逻辑运算符有什么作用?学习 java 程序 是需要大家有一些逻辑思维的 但是除了有逻辑思维之外 还要学会使用逻辑运算符 那么接下来 我们就来给大家讲解一下 java 逻辑运算符的使用方法 与或非 amp amp amp amp amp 双与 两边都是 true 结果才为 true amp 与 两个同时为 true 结果为 true 双或 有一个是 true 结果就是 true 或 两个

    2026年3月19日
    1
  • Vue生命周期函数(详解)

    Vue生命周期函数(详解)什么是 Vue 的生命周期 Vue 的生命周期函数有哪些

    2026年3月26日
    2
  • QStringList的应用

    QStringList的应用QStringList初始化QStringListqstrList;qstrList<<“Android”<<“QtCreator”<<“Java”<<“C++”;QStringListIteratorstrIterator(qstrList);while(strIterator.hasNext())qDebug()<<strIterator.next()<<endl;这里我

    2022年5月6日
    50
  • 简单理解spu和sku

    简单理解spu和sku简单理解 spu 和 skuspu 和 sku 是啥 spu 百度百科定义 SPU StandardProd 标准化产品单元 是商品信息聚合的最小单位 是一组可复用 易检索的标准化信息的集合 该集合描述了一个产品的特性 通俗点讲 属性值 特性相同的商品就可以称为一个 SPU 个人理解 属性相同的商品就可以称为一个 SPU 这里的属性指小米 9 手机的属性 颜色 版本等如图 该

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号