希尔排序

  • 希尔排序思想
  • 代码实现及时间复杂度

希尔排序思想

希尔排序是在插入排序基础上做出的改进,引进分组的思想,以一个步长(step)为间隔单位的数据为一组,也就是分成了step组,而且每次分组的步长是递减的,直到步长是1. 每次分组后以组为单位进行插入排序。如下图所示:



越进行后面,数组越接近于有序,插入排序使用更少。

代码实现及时间复杂度


private void ShellSort(int[] array , int n) {int len = array.length;if (len < 2)return;int step = n/2;while(step >= 1) {//分成了step组for (int i = 0 ; i < step ; i ++) {//没组进行插入排序for (int j = i + step ; j < len ; j += step) {int index = j;int temp = array[index];for (index = j ; index > i && array[index] < array[index - 1] ; index -= step)array[index] = array[index = 1];array[j] = temp;}}step = step/2;}}

时间复杂度:O(n^(1+x)) 0 < x < 1,下面是我自己推导的时间复杂度:

步长设置:初始步长step = n/2 后继 step = step/2;

由于多次插入排序,一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以,Shell排序是不稳定的。

希尔排序及手推时间复杂度(java实现)相关推荐

  1. 希尔排序算法(思路分析) [数据结构][Java]

    希尔排序算法(思路分析) 希尔排序也称之为: 缩小增量排序 希尔排序提出的背景: 因为简单插入排序中存在一些问题( 这里我们以升序排序为例 ): 当我们要待插入的数值比较小时后移的次数明显增多,对效率 ...

  2. 希尔排序的理解和实现(Java)

    希尔排序原理 希尔排序(shell sort)这个排序方法又称为缩小增量排序,是1959年D·L·Shell提出来的. 该方法的基本思想是:设待排序元素序列有n个元素,首先取一个整数increment ...

  3. java希尔排序(含希尔排序代码)

    目录 一:希尔排序思想 二:希尔排序比插入排序的好处 三:希尔排序代码 四:结果 一:希尔排序思想 基本思想:希尔排序是把序列按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量的逐渐减少, ...

  4. java代码实现希尔排序_Java希尔排序算法代码实现

    Java希尔排序算法代码实现 时间:2017-08-30     来源:华清远见JAVA学院 什么是Java希尔排序算法呢? 希尔排序算法实际上是一种分组插入的排序算法,又被称为缩小增量排序.今天华清 ...

  5. 经典排序算法之希尔排序

    排序:希尔排序(算法) 一.简介 希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩小增量排序. 希尔排序是非稳定排序算法. 希尔排序因DL.Shell于1959 ...

  6. 希尔排序python 简书_排序:希尔排序(算法)

    文 | 莫若吻 (注:如果想更好的理解希尔排序,请先看看我的上一篇博客插入排序,希望会对你有帮助.) 一.简介 希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩 ...

  7. 数据结构之插入排序:希尔排序(缩小增量排序)

    排序算法:希尔排序.缩小增量排序 思维导图: 希尔排序的定义: 例: 希尔排序d的选取: 希尔排序的代码实现: 希尔排序的性能: 思维导图: 希尔排序的定义: 普通的插入算法正序时时间复杂度会很小,但 ...

  8. 理论基础 —— 排序 —— 希尔排序

    [概述] 希尔排序是一种不稳定的排序方法,其是对直接插入排序的改进. 直接排序再基本本身基本有序时,只需要少量的插入操作,即可完成整个记录的排序工作,所谓基本有序,就是小的关键字基本在前,大的关键字基 ...

  9. shell按照时间排序_【经典排序】希尔排序

    希尔排序 简介: 希尔排序,英文Shell's sort,是一位叫D.L.Shell的老哥在1959就提出来的算法,是<插入排序>的一种又称"缩小增量排序"(Dimin ...

最新文章

  1. HTTP/HTTPS抓包工具-Fiddler
  2. hadoop mac和linux,How to Install Hadoop? (On Mac OS,Linux or Cygwin on Windows)
  3. 异常信息: java.lang.ClassNotFoundException: org.aspec
  4. Dubbo和Spring Cloud微服务架构
  5. 软件工程师 VS 硬件工程师
  6. 天亮了起来的飞鸽传书官方下载
  7. 蛋壳租客迎来好消息!微众银行开放贷款结清入口
  8. 4: Consolidating Datasets ( Challenge: Data Munging Using The Command Line)
  9. [VB.NET]请教一个如何对姓名进行同音字查询?
  10. 微信步数修改.html,httpCatcher,charles修改微信步数,支付宝森林能量满满
  11. 【深度相机系列二】深度相机原理揭秘--飞行时间(TOF)
  12. Visual studio的中英文切换
  13. Open3d数据滤波和点云分割
  14. dpdk 驱动移植叩开 kni 模块那些黑暗的角落
  15. GeeM2引擎弹出装备显示框的设置方法
  16. 微信端H5页面调用分享接口
  17. CTF简单的文件修复
  18. Python的简单代码:两天肝出画函数图像(散点图)的程序(不用matplotlib)(含白菜也能看懂的超超超详细讲解和源代码哦)
  19. MC34063芯片应用
  20. Hbuilder 连接MuMu模拟器

热门文章

  1. 网络营销推广怎么做 一封神奇的文案策划背后的真相
  2. 新1期_012课_内存控制器与SDRAM
  3. tb6600 两相四线步进电机相关参数计算关系
  4. android/iphone/windows/linux声波通讯库
  5. 使用同花顺F10查看个股概况!股票量化分析工具QTYX-V2.1.9
  6. SAP那些事-职业篇-26-企业信息化:从拼图到搭积木
  7. 什么是HTML语义化标签?为什么要用H5语义化标签?HTML5语义化标签有哪些
  8. MacOS 使用SwitchHosts修改 hosts 不生效的原因及解决方法
  9. Python有趣的小案例-美国队长盾牌
  10. ubuntu中自带的ufw防火墙