首页 > 其他分享 >数据结构之希尔排序

数据结构之希尔排序

时间:2024-09-15 12:53:56浏览次数:13  
标签:11 25 排序 22 插入排序 希尔 12 90 数据结构

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]

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

标签:11,25,排序,22,插入排序,希尔,12,90,数据结构
From: https://blog.csdn.net/qq_39311377/article/details/142277162

相关文章

  • redis基本数据结构-set
    文章目录1.set的基本介绍1.1.set底层结构之hash表的简单介绍1.2.常用命令2.常见的业务场景2.1.标签系统2.2.社交网络好友关系1.set的基本介绍参考链接:https://mp.weixin.qq.com/s/srkd73bS2n3mjIADLVg72Aredis的set数据结构是一个无序的集合,可以存储不......
  • SQL第三课——排序检索数据
    如何使用select语句的orderby子句,根据需要排序检索出的数据。3.1排序数据如果不排序,数据一般以它在表中出现的顺序显示,有可能是数据最初添加到表中的顺序。如果数据随后进行过更新或删除,那么这个顺序将会受到DBMS重用回收存储空间的方式影响。如果不明确控制的话,最终的结......
  • 十大经典排序算法
    排序算法平均时间复杂度最好情况最坏情况空间复杂度排序方式稳定性冒泡排序O(n^2)O(n)O(n^2)O(1)in-place稳定选择排序O(n^2)O(n^2)O(n^2)O(1)in-place不稳定插入排序O(n^2)O(n)O(n^2)O(1)in-place稳定希尔排序O(nlogn)O(nlog^2n)O(nlog^2n)O(1)in-place不稳定归并排序O(......
  • 链表的快速排序(C/C++实现)
    一、前言大家在做需要排名的项目的时候,需要把各种数据从高到低排序。如果用的快速排序的话,处理数组是十分简单的。因为数组的存储空间的连续的,可以通过下标就可以简单的实现。但如果是链表的话,内存地址是随机分配的,不能像数组那样通过下标就直接实现。所以在这里给大家介绍......
  • 关于JS解构数据结构的表现形式
    对数组或对象类数据结构,尤其是复杂的JOSN数据结构,要从中取出想要的个别数据,往往会采用遍历方法进行,即麻烦又增加了运行时间。从ES6开始,JS增加了解构进行简化,本质上是打散复杂的数据结构,将其折分为更小的部分(复制出的小结构),从而使用数据更为方便快捷。一、对象解构1.单层对......
  • python实现插入排序算法
    插入排序是指,在已经排序过的列表,将需要添加的数据从开头依次进行比较,找到保存的位置,并将数据进行插入排序的方法。比如列表6,15,4,2,8,5,11,9,7,13第一步6和15比较,15大,不用比较。第二步4和前面两个数比较,就是6和15,4最小,将4插入到最前面。编程语言如何实现这个过程,将4和前......
  • C# 使用NPOI 导出文件到Excel.支持分页及自定义排序
    导出帮助类usingNPOI.HSSF.UserModel;usingNPOI.OpenXmlFormats.Spreadsheet;usingNPOI.OpenXmlFormats.Vml;usingNPOI.SS.UserModel;usingNPOI.SS.Util;usingSystem;usingSystem.Collections.Generic;usingSystem.Drawing;usingSystem.IO;usingSystem.Text;......
  • 数据结构实验第一周
    6-1差距几何排序的话复杂度要O(n),可以选择桶排序或者计数排序,我选择的是计数排序比如是32144786我开一个数组a[9](因为最大为8),然后分别对出现的数计数有a:111201110然后按顺序放回就是12344678intfun(intD[],intN){if(N<2)return0;......
  • 前端必须掌握的五种排序算法,你会几种?
    文章目录前言1.冒泡排序(BubbleSort)2.选择排序(SelectionSort)3.插入排序(InsertionSort)4.快速排序(QuickSort)5.归并排序(MergeSort)前言在前端开发中,对数据进行排序是一项基本且常见的任务。掌握排序算法不仅可以帮助我们更有效地处理数据,还能提升代码的执行效......
  • JAVA进阶-set,Comparable排序,数据结构-树
    day07-set,Comparable排序,数据结构-树泛型Set概述和特点TreeSet集合概述和特点Comparable排序自然排序Comparable的使用使用空参构造创建TreeSet集合自定义Student类实现Comparable接口重写里面的comparaTo方法自然排序简单原理图比较器排序Compara......