java希尔排序(含希尔排序代码)
目录
一:希尔排序思想
二:希尔排序比插入排序的好处
三:希尔排序代码
四:结果
一:希尔排序思想
基本思想:希尔排序是把序列按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量的逐渐减少,每组包含的关键词越来越多,当增量减至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希尔排序(含希尔排序代码)相关推荐
- 十大经典排序算法(图解与代码)——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序(Python and Java)
排序 重新排列表中的元素,使表中的元素按照关键字递增或者递减 内部排序: 指在排序期间,元素全部存放在内存中的排序 外部排序: 指在排序期间元素无法全部同时存放在内存中,必须在排序的过程中根据要求不断 ...
- java代码实现希尔排序_Java希尔排序算法代码实现
Java希尔排序算法代码实现 时间:2017-08-30 来源:华清远见JAVA学院 什么是Java希尔排序算法呢? 希尔排序算法实际上是一种分组插入的排序算法,又被称为缩小增量排序.今天华清 ...
- 经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】
经典十大排序算法[Java版完整代码] 写在前面的话 十大排序算法对比 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 插入排序 希尔排序 计数排序 桶排序 基数排序 完整测试类 写在前面的话 ...
- java希尔排序_java_java高级排序之希尔排序,希尔排序对于多达几千个数据 - phpStudy...
java高级排序之希尔排序 希尔排序对于多达几千个数据项的,中等大小规模的数组排序表现良好,希尔排序不像快速排序和其它时间复杂度为O(n*logn)的排序算法那么快,因此,对非常大的文件排序,它不是最 ...
- java 快速排序算法简单_排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序......
先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...
- Java数据结构——直接插入排序+希尔排序+冒泡排序
文章目录 一.插入排序 (一).什么是插入排序 (二).图例 (三).Java代码 二.希尔排序 (一).什么是希尔排序 (二).图例 (三).Java代码 三.冒泡排序 (一).什么是冒泡排序 (二 ...
- java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...
本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序
这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...
- java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...
冒泡排序 依次比较相邻的元素,若发现逆顺序,则交换.小的向前换,大的向后换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成. import ...
- 希尔排序java写法_java高级排序之希尔排序
希尔排序对于多达几千个数据项的,中等大小规模的数组排序表现良好,希尔排序不像快速排序和其它时间复杂度为o(n*logn)的排序算法那么快,因此,对非常大的文件排序,它不是最优选择,但是希尔排序比选择排 ...
最新文章
- 100例shell脚本之八远程管理获得hosts ip以及推送公钥到hosts
- mycncart不同地区不同固定运费
- React源码分析与实现(一):组件的初始化与渲染
- 解决idea中连接MySQL数据库后写SQL语句没有提示
- matplotlib之Rectangle
- java动态代理--代理接口无实现类
- Jsoup解析body片段
- unsigned char bcd串乱码问题解决
- PAT乙级1088 三人行 (20分)
- 进程与线程的区别与联系(经典面试题)
- 照片审核处理工具_不需要Photoshop,这5款在线处理图片工具能帮你好好处理照片!...
- 我们都被监控了?揭秘全球电信网络7号信令(SS7)漏洞
- mysql查询bom清单_按BOM清单展开物料及需求(SQL)
- Instagram使用教程
- 微信摇心愿如何选不同服务器,2020微信游戏摇心愿活动参与方法介绍
- 2020N1叉车司机证考试及N1叉车司机考试软件
- K8s 中 iptables 和ipvs 的理解
- 培训班和科班出来的程序员有什么不同之处?看完这个你就能明白!
- 鸡和兔放在一起,一共有20个头和56只脚,问鸡和兔各几只?
- python爬取王者荣耀皮肤高清图
热门文章
- 详解外网访问内网DDNS作用 及ddns解析软件使用方法
- DDNS配置实例(DHCP+DNS=DDNS)
- 木瓜移动SaaS平台:木瓜大橙白皮书 Part1 - 智能客服功能介绍
- 11-17 成长日记
- html5在线客服系统,产品解析|Live800在线客服系统,让服务和营销更简单
- C++/Qt音视频通话开发MetaRTC源码解读,视频推流和拉流
- 让Chrome浏览器下载而非打开文件
- Leetcode之动态规划(DP)专题-1025. 除数博弈(Divisor Game)
- windows temp cab 文件
- 说说我们的项目计划 (转)