近日上班摸鱼闲来无事的时候决定看看一些排序算法,当看到希尔排序(shellSort)的时候,发现不能通过动图直观的看懂思路,因此将代码C下来逐行分析了一下,作为日记记录一下。

    public static int[] shellSort(int[] srcArr){int[] arr = Arrays.copyOf(srcArr, srcArr.length);int length = arr.length;int temp;//分区点:如:1,2,3中,2为分区点的话,则左半区为1,右半区为2、3for (int step = length / 2; step >= 1; step /= 2) {//step为每一次分区(step/=2)的分区点且为右半区第一个索引值for (int i = step; i < length; i++) {//temp = 右半区的值 length为奇数时step为分区点,max(j)也为分区点 即step=max(j)temp = arr[i];//j为左半区索引值  length为偶数时step为右半区第一个索引值,max(j)为左半区最大索引值,即step = max(j) + 1, 因此 step >= max(j)恒成立int j = i - step;//左半区的值大于右半区的值的话,则将其放到右半区对应位置while (j >= 0 && arr[j] > temp) {arr[j + step] = arr[j];/*(因为step >= max(j),即j -= step后j <= 0,即while循环最多执行两次,且执行第二次时一定是j=0,即while结束后只有两种情况,执行1次:j=j-step;2次:j=0-step)*/j -= step;}//因此j + step == j || 0成立,结合j的取值范围,即arr[j+step]为左半区的值,到此完成左右半区元素的位置交换arr[j + step] = temp;}}//综上,大概思路便是将数组进行左右分区,再遍历左右区进行对比交换,然后对左半区再对半取分区点,遍历左右区对比交换,完成排序;要注意的是step是往左移动的,以step为分界点的话左半区会越来越小,右半区越大,直到左半区只剩第一个元素为止。return arr;}

记录:希尔排序思路分析相关推荐

  1. python希尔排序的优缺点_Python排序搜索基本算法之希尔排序实例分析

    本文实例讲述了Python排序搜索基本算法之希尔排序.分享给大家供大家参考,具体如下: 希尔排序是插入排序的扩展,通过允许非相邻的元素进行交换来提高执行效率.希尔排序最关键的是选择步长,本程序选用Kn ...

  2. 3-增量序列{3,2,1}的希尔排序时间复杂度分析

    在本文中我们进行(3,2,1)-Shellsort在n元素随机序列的算法分析 1.pre h = (ht,ht-1,-,h2,h1) : h1=1的正整数向量 S1(h;n): 第j趟排序进行的平均元 ...

  3. 数据结构:从插入排序到希尔排序

    数据结构:从插入排序到希尔排序 插入排序 算法思路 每次从无序表中取出第一个元素,将其插入到有序表中的适当位置,使有序表的长度不断加长,完成排序过程. n个待排序的元素由一个有序表和一个无序表组成,开 ...

  4. 用Python实现希尔排序

    希尔排序 希尔排序(Shell Sort)是插⼊排序的⼀种.也称缩⼩增量排序,是直接插⼊排序算法的⼀种更⾼效的改进版本.希尔排序是⾮稳定排序算法.该⽅法因DL.Shell于1959年提出⽽得名. 希尔 ...

  5. 排序:插入排序与希尔排序

    插入排序 插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,在从 ...

  6. 希尔排序不稳定例子_Python实现希尔排序(已编程实现)

    作者:小小程序员 链接:https://zhuanlan.zhihu.com/p/65334039 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 观察一下" ...

  7. 希尔排序增量怎么确定_Python实现希尔排序(已编程实现)

    希尔排序: 观察一下"插入排序":其实不难发现她有个缺点: 如果当数据是"5, 4, 3, 2, 1"的时候,此时我们将"无序块"中的记录插 ...

  8. 希尔排序(c语言实现)

    插入排序的一个弊端,就是在插入过程中,我们是将后面的元素依次与前面的元素按照从后往前的顺序比较,一旦一个很小的元素在序列最后,那么它要比较的次数就会很多,这个问题在希尔排序中得到了解决. 希尔排序思路 ...

  9. 九大内部排序算法(快速排序、归并排序、堆排序、希尔排序、基数排序)

    排序(Sorting)是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列. 文章目录 由于待排序的记录数量不同,使得排序过程中涉及的存储器 ...

最新文章

  1. expect,spawn用法小结
  2. OpenGL学习之路(二)
  3. python编的俄罗斯方块游戏_python编写俄罗斯方块
  4. python文件路径过滤器_SUMO入门(八) - 从Python引入TraCI接口
  5. php system 返回值126,exec – PHP return_val是126
  6. Django基础—— 19.Form
  7. XAMPP报错:mysqli::real_connect(): (HY000/1045): Access denied for user ‘pma‘@‘localhost‘
  8. 跟老板参加饭局,席间老板叫我去加菜,我该怎么做?
  9. zookeeper集群为什么是单数
  10. 【Oracle】ORA-04031错误解决
  11. Mac电脑直接拔掉U盘和移动硬盘会有什么影响
  12. 手把手教你搭建Java 开发环境
  13. 东芝2303am维护清零_东芝打印机2303A怎样清零?
  14. 利用树莓派4搭建私有云盘
  15. 为何CPU散片这么便宜?盒装CPU值得买吗
  16. Chrome (Google) 浏览器的快捷键大全
  17. css3的clip-path方法裁切图片(三角形,多边形,圆,椭圆)
  18. 强大的文字处理器——Nisus Writer Pro
  19. 3款好用的知识库软件,帮你解决私有化部署,老板抓紧收藏
  20. yum安装telnet详解

热门文章

  1. .net项目开发工具最新动态
  2. oracle数据库登录审计,oracle数据库审计
  3. 训练日志 2019.1.23
  4. 食物链(信息学奥赛一本通-T1390)
  5. linux 禁用日志,清除linux系统日志,禁用linux系统日志,删除linux日志
  6. springcloud 熔断不生效_深入理解SpringCloud与微服务构建
  7. python二进制移位_python学习特辑——二进制和位运算篇
  8. C++:函数指针是个什么玩意儿?
  9. 一个大胖鲸-Docker(1)
  10. python批量修改labelme(COCO)标注的json文件的label标签名称