目录

一:希尔排序思想

二:希尔排序比插入排序的好处

三:希尔排序代码

四:结果


一:希尔排序思想

基本思想:希尔排序是把序列按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量的逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个序列恰好被分为一组,算法便终止。

算法实现:希尔排序需要定义一个增量,这里选择增量为gap=length/2,缩小增量以gap=gap/2的方式,这个增量可以用一个序列来表示,{n/2,(n/2)/2…1},称为增量序列,这个增量是比较常用的,也是希尔建议的增量,称为希尔增量,但其实这个增量序列不是最优的。

(1)对于一个无序序列{8,9,1,7,2,3,5,4,6,0}来说,我们初始增量为gap=length/2=5,所以这个序列要被分为5组,分别是{8,3},{9,5},{1,4},{7,6},{2,0},对这5组分别进行直接插入排序,则小的元素就被调换到了前面,然后再缩小增量gap=gap/2=2。

(2)上面缩小完增量后,序列再次被分为2组,分别是{3,1,0,9,7}和{5,6,8,4,2},再对这两组进行直接插入排序,那么序列就更加有序了。

(3)然后再缩小增量gap=gap/2=1,这时整个序列就被分为一组即{0,2,1,4,3,5,7,6,9,8},最后再进行调整,就得到了有序序列{0,1,2,3,4,5,6,7,8,9}。

二:希尔排序比插入排序的好处

插入排序只能一个一个往后面移动,希尔排序可以跳着步长移动,小的数很快就会到达最前面。


在这两个部分中,取步长为四,则7和4和0比较,5和3,9和6,8和2在这四个部分中,每个部分都进行一次直接插入排序。

每个小组进行完插入排序之后变成:

在比较第二轮时,我们把步长除以二,此时步长变成了2,数组变成了两组:①0,6,4,9,7 ②3,2,5,8

在每一组中继续进行直接插入排序
结果如下:

 再将步长除以2,此时步长为1,也是最后一次排序

希尔排序最重要的就是步长,让步长不断地除以二,直到步长为1,优点是如果在数组最后加入一个小元素,他会被很快移到最前面。

三:希尔排序代码

package totoSort;import java.util.Arrays;public class ShellSort {public static void main(String[] args) {// TODO Auto-generated method stubint[] arrays = new int[] {1,5,2,3,6,9,4,0,1};//实现增量的变化for(int gap = arrays.length / 2; gap > 0; gap /= 2) {for(int i = gap; i < arrays.length; i++) {for(int j = i - gap; j >= 0; j -= gap) {if(arrays[j] > arrays[j + gap]) {int temp = arrays[j];arrays[j] = arrays[j + gap];arrays[j + gap] = temp;}}}}System.out.println(Arrays.toString(arrays));}
}

四:结果

java希尔排序(含希尔排序代码)相关推荐

  1. 十大经典排序算法(图解与代码)——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序(Python and Java)

    排序 重新排列表中的元素,使表中的元素按照关键字递增或者递减 内部排序: 指在排序期间,元素全部存放在内存中的排序 外部排序: 指在排序期间元素无法全部同时存放在内存中,必须在排序的过程中根据要求不断 ...

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

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

  3. 经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】

    经典十大排序算法[Java版完整代码] 写在前面的话 十大排序算法对比 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 插入排序 希尔排序 计数排序 桶排序 基数排序 完整测试类 写在前面的话   ...

  4. java希尔排序_java_java高级排序之希尔排序,希尔排序对于多达几千个数据 - phpStudy...

    java高级排序之希尔排序 希尔排序对于多达几千个数据项的,中等大小规模的数组排序表现良好,希尔排序不像快速排序和其它时间复杂度为O(n*logn)的排序算法那么快,因此,对非常大的文件排序,它不是最 ...

  5. java 快速排序算法简单_排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序......

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  6. Java数据结构——直接插入排序+希尔排序+冒泡排序

    文章目录 一.插入排序 (一).什么是插入排序 (二).图例 (三).Java代码 二.希尔排序 (一).什么是希尔排序 (二).图例 (三).Java代码 三.冒泡排序 (一).什么是冒泡排序 (二 ...

  7. java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...

    本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...

  8. 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序

    这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...

  9. java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...

    冒泡排序 依次比较相邻的元素,若发现逆顺序,则交换.小的向前换,大的向后换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成. import ...

  10. 希尔排序java写法_java高级排序之希尔排序

    希尔排序对于多达几千个数据项的,中等大小规模的数组排序表现良好,希尔排序不像快速排序和其它时间复杂度为o(n*logn)的排序算法那么快,因此,对非常大的文件排序,它不是最优选择,但是希尔排序比选择排 ...

最新文章

  1. 100例shell脚本之八远程管理获得hosts ip以及推送公钥到hosts
  2. mycncart不同地区不同固定运费
  3. React源码分析与实现(一):组件的初始化与渲染
  4. 解决idea中连接MySQL数据库后写SQL语句没有提示
  5. matplotlib之Rectangle
  6. java动态代理--代理接口无实现类
  7. Jsoup解析body片段
  8. unsigned char bcd串乱码问题解决
  9. PAT乙级1088 三人行 (20分)
  10. 进程与线程的区别与联系(经典面试题)
  11. 照片审核处理工具_不需要Photoshop,这5款在线处理图片工具能帮你好好处理照片!...
  12. 我们都被监控了?揭秘全球电信网络7号信令(SS7)漏洞
  13. mysql查询bom清单_按BOM清单展开物料及需求(SQL)
  14. Instagram使用教程
  15. 微信摇心愿如何选不同服务器,2020微信游戏摇心愿活动参与方法介绍
  16. 2020N1叉车司机证考试及N1叉车司机考试软件
  17. K8s 中 iptables 和ipvs 的理解
  18. 培训班和科班出来的程序员有什么不同之处?看完这个你就能明白!
  19. 鸡和兔放在一起,一共有20个头和56只脚,问鸡和兔各几只?
  20. python爬取王者荣耀皮肤高清图

热门文章

  1. 详解外网访问内网DDNS作用 及ddns解析软件使用方法
  2. DDNS配置实例(DHCP+DNS=DDNS)
  3. 木瓜移动SaaS平台:木瓜大橙白皮书 Part1 - 智能客服功能介绍
  4. 11-17 成长日记
  5. html5在线客服系统,产品解析|Live800在线客服系统,让服务和营销更简单
  6. C++/Qt音视频通话开发MetaRTC源码解读,视频推流和拉流
  7. 让Chrome浏览器下载而非打开文件
  8. Leetcode之动态规划(DP)专题-1025. 除数博弈(Divisor Game)
  9. windows temp cab 文件
  10. 说说我们的项目计划 (转)