记录:希尔排序思路分析
近日上班摸鱼闲来无事的时候决定看看一些排序算法,当看到希尔排序(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;}
记录:希尔排序思路分析相关推荐
- python希尔排序的优缺点_Python排序搜索基本算法之希尔排序实例分析
本文实例讲述了Python排序搜索基本算法之希尔排序.分享给大家供大家参考,具体如下: 希尔排序是插入排序的扩展,通过允许非相邻的元素进行交换来提高执行效率.希尔排序最关键的是选择步长,本程序选用Kn ...
- 3-增量序列{3,2,1}的希尔排序时间复杂度分析
在本文中我们进行(3,2,1)-Shellsort在n元素随机序列的算法分析 1.pre h = (ht,ht-1,-,h2,h1) : h1=1的正整数向量 S1(h;n): 第j趟排序进行的平均元 ...
- 数据结构:从插入排序到希尔排序
数据结构:从插入排序到希尔排序 插入排序 算法思路 每次从无序表中取出第一个元素,将其插入到有序表中的适当位置,使有序表的长度不断加长,完成排序过程. n个待排序的元素由一个有序表和一个无序表组成,开 ...
- 用Python实现希尔排序
希尔排序 希尔排序(Shell Sort)是插⼊排序的⼀种.也称缩⼩增量排序,是直接插⼊排序算法的⼀种更⾼效的改进版本.希尔排序是⾮稳定排序算法.该⽅法因DL.Shell于1959年提出⽽得名. 希尔 ...
- 排序:插入排序与希尔排序
插入排序 插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,在从 ...
- 希尔排序不稳定例子_Python实现希尔排序(已编程实现)
作者:小小程序员 链接:https://zhuanlan.zhihu.com/p/65334039 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 观察一下" ...
- 希尔排序增量怎么确定_Python实现希尔排序(已编程实现)
希尔排序: 观察一下"插入排序":其实不难发现她有个缺点: 如果当数据是"5, 4, 3, 2, 1"的时候,此时我们将"无序块"中的记录插 ...
- 希尔排序(c语言实现)
插入排序的一个弊端,就是在插入过程中,我们是将后面的元素依次与前面的元素按照从后往前的顺序比较,一旦一个很小的元素在序列最后,那么它要比较的次数就会很多,这个问题在希尔排序中得到了解决. 希尔排序思路 ...
- 九大内部排序算法(快速排序、归并排序、堆排序、希尔排序、基数排序)
排序(Sorting)是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列. 文章目录 由于待排序的记录数量不同,使得排序过程中涉及的存储器 ...
最新文章
- expect,spawn用法小结
- OpenGL学习之路(二)
- python编的俄罗斯方块游戏_python编写俄罗斯方块
- python文件路径过滤器_SUMO入门(八) - 从Python引入TraCI接口
- php system 返回值126,exec – PHP return_val是126
- Django基础—— 19.Form
- XAMPP报错:mysqli::real_connect(): (HY000/1045): Access denied for user ‘pma‘@‘localhost‘
- 跟老板参加饭局,席间老板叫我去加菜,我该怎么做?
- zookeeper集群为什么是单数
- 【Oracle】ORA-04031错误解决
- Mac电脑直接拔掉U盘和移动硬盘会有什么影响
- 手把手教你搭建Java 开发环境
- 东芝2303am维护清零_东芝打印机2303A怎样清零?
- 利用树莓派4搭建私有云盘
- 为何CPU散片这么便宜?盒装CPU值得买吗
- Chrome (Google) 浏览器的快捷键大全
- css3的clip-path方法裁切图片(三角形,多边形,圆,椭圆)
- 强大的文字处理器——Nisus Writer Pro
- 3款好用的知识库软件,帮你解决私有化部署,老板抓紧收藏
- yum安装telnet详解
热门文章
- .net项目开发工具最新动态
- oracle数据库登录审计,oracle数据库审计
- 训练日志 2019.1.23
- 食物链(信息学奥赛一本通-T1390)
- linux 禁用日志,清除linux系统日志,禁用linux系统日志,删除linux日志
- springcloud 熔断不生效_深入理解SpringCloud与微服务构建
- python二进制移位_python学习特辑——二进制和位运算篇
- C++:函数指针是个什么玩意儿?
- 一个大胖鲸-Docker(1)
- python批量修改labelme(COCO)标注的json文件的label标签名称