深圳Java培训:5分钟了解希尔排序
深圳Java培训:5分钟了解希尔排序
前言
希尔排序(shell sort)是插入排序的一种,它是简单插入排序经过改进之后的一个更高效的算法,这个排序方法又称为缩小增量排序。
希尔排序思想介绍
简单来说,希尔排序是将较大的数据集合逻辑上分割成若干个小的集合,然后对每个分组分别进行插入排序。
例如,假设待排序元素序列有n个元素,首先取一个整数increment(小于n)作为间隔将全部元素分为increment个子序列,在每一个子序列中分别实行直接插入排序。然后缩小间隔increment,重复上述子序列划分和排序工作。直到最后取increment=1,将所有元素放在同一个子序列中排序为止。
算法说明:
待排序数据:12,1,6,7,4,10,5,9
第一次的增量为数组元素的长度/2,即increment=4,得到四个分组:
分组一:12, 4
分组二: 1, 10
分组三: 6, 5
分组四: 7, 9
对这四个分组分别进行插入排序,最终得到:
4,1,5,7,12,10,6,9
第二次比较,increment取上次值的一半,即increment=2,得到两个分组:
分组一:4, 5, 12, 6
分组二: 1, 7, 10, 9
对这两个分组分别进行插入排序,最终得到:
1, 5,7, 6,9,12,10
第三次比较,increment=1,即只有一个分组:
分组一:4,1,5,7,6,9,12,10
对其进行插入排序,最终得到:
1,4,5,6,7,9,10,12
希尔排序的代码实现
public static void shellSort(int[] arr){
int temp = 0;
int j = 0;
//增量初始值是长度的一半,增量每次变为原来的一半
for(int inc = arr.length/2 ; inc >= 1 ; inc /= 2){
for(int i = inc ; i < arr.length; i++){
temp = arr[i];
//将当前数与减去增量之后位置的数进行比较,如果大于,则后移
for(j = i - inc; j >=0; j -= inc){
if(arr[j] > temp){
arr[j + inc] = arr[j];
}else{
break;
}
}
arr[j + inc]=temp;
}
}
}
总结
希尔排序是插入排序的改进,但是希尔排序中使用到了多次插入排序,在不同的插入排序过程中,相同的元素在各自的插入排序中可能会移动,造成排序的稳定性被打乱,所以希尔排序是不稳定的。
深圳Java培训:5分钟了解希尔排序相关推荐
- 深圳Java培训机构排名榜单:动力节点上榜,第一名耳熟能详
对于想要学Java的人来说,参考深圳Java培训机构排名榜单是最有效率的选择培训机构的方法,随着近些年学Java编程的人数暴增,Java培训市场也得到了极大的发展,Java培训机构数量空前的多,从而市 ...
- 2023年深圳Java培训机构排名,不看后悔系列!
不忘初心,方得始终.2023,继续战斗!想要学习Java的小伙伴们看过来~深圳Java培训机构排名最新排行榜来了!靠谱的Java培训机构都在这里,总有一个你喜欢的,总能选出一个合适你的,快拿出小本本记 ...
- 深圳Java培训:相伴java,感受spring
深圳Java培训:相伴java,感受spring 时间就这么匆匆忙忙的来到了2019,白驹过隙中我已大学毕业工作了9年多,从那个大学时迷茫懵懂的青涩学子,成为今天已活跃在IT开发行业9年多的油腻大叔. ...
- 深圳Java培训未来5-10年的前景怎么样?
深圳Java培训未来5-10年的前景怎么样? 我想说题主这种情况太正常了!下面这段话,我不想只跟题主说,更多的是说给现在正犹豫要不要考研的小伙伴说的! 分为下面两个方面来说. 1.针对题主的问题分析建 ...
- 深圳Java培训学习:Java8.0新特性之Lambda表达式--【千锋】
深圳Java培训学习:Java8.0新特性之Lambda表达式–[千锋] 前言 Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.本篇文章,主要给大家介绍的是lambda表 ...
- 深圳Java培训学习:SpringBoot的yml配置及多环境切换【千锋】
深圳Java培训学习:SpringBoot的yml配置及多环境切换[千锋] 1,配置风格 从application.properties转换到application.yml 并不改变功能效果,只是改变 ...
- 深圳java培训:Java也能做爬虫。
深圳java培训:Java也能做爬虫. 现在提到爬虫人第一个想到的就是python,其实使用Java编写爬虫也是很好的选择, 下面给大家展示一个使用Java基础语言编写的爬取小说的案例: 实现功能: ...
- 深圳java培训:怎样理解 Java 注解和运用注解编程?
深圳java培训:怎样理解 Java 注解和运用注解编程? 注解和使用 先来看下概念首先从注释来看: 注释:给代码添加说明和解释,注释帮助开发人员理解程序.(Comment)说白点就是注释是给人看的. ...
- 深圳Java培训:WebService的简单使用
深圳Java培训:WebService的简单使用 我们在开发项目时,如果有需求需要从一个项目中去调用另一个项目中的资源,通常可以有四种方案: 1.RESTful 2.WebService 3.RPC ...
最新文章
- 【AJAX】Ajax学习总结
- Python字符串居然可以这样玩 到底怎么做到的 年薪50w程序员揭晓
- Codeforces Educational 38 C. Constructing Tests ( 数学公式推导+暴力)
- Linux /etc/inittab 文件的解读
- jpeg6 安装问题!
- 一个有意思的CStatic和combobox以及Cedit控件结合使用
- 1986暑假济南清北学堂腾飞营摸鱼记
- 搜狗加入鹅厂,将成为腾讯间接全资子公司!
- 愤怒的小鸟的html制作,如何做html5山寨版愤怒的小鸟
- vue怎么获取axios的return值?
- wow中国正式商业化收费运营 level 31达成
- 什么是一级域名、二级域名?
- oracle12c cdb修改,ORACLE 12C 新特性CDB及PDB
- 基于微信小程序的兼职发布接单系统
- Houdini运行时崩溃了怎么办?别害怕,还有一点点救!
- 短网址跳转微信公众号
- Python3基础,这篇就够了(总结版)
- 如何查询某只股票的历史股价?
- 初中使用计算机教学反思,初中信息技术教学反思(通用5篇)
- vue访问本地静态资源文件