希尔排序java写法_java高级排序之希尔排序
希尔排序对于多达几千个数据项的,中等大小规模的数组排序表现良好,希尔排序不像快速排序和其它时间复杂度为o(n*logn)的排序算法那么快,因此,对非常大的文件排序,它不是最优选择,但是希尔排序比选择排序和插入排序这种时间复杂度为o(n²)的排序要快的多,并且它非常容易实现,代码简短
希尔排序也是插入排序的一种,在插入排序中,如果最小的数在最后面,则复制的次数太多,而希尔解决了这个问题,它也是n-增量排序,它的思想是通过加大插入排序中元素的间隔,并在这些有间隔的元素中进行插入排序,当这些数据项排过一趟序后,希尔排序算法减小数据项的间隔再进行排序,依此进行下去。进行这些排序时数据项之间的间隔被称为增量,并且习惯上用字母h来表示。
对于某个马上要进行希尔排序的数组,开始的间隔应该更大,然后间隔不段减小,直到间隔变为1.
间隔序列:
间隔序列中的数字素质通常被认为很重要-除了1之外它们没有公约数,这个约束条件使每趟排序更有可能保持前一趟排序已排好的效果,对于不同的间隔序列,有一个绝对的条件,就是逐渐减小的间隔最后一定要等于1.因此最后一趟是一次普通的插入排序。
下面列出的例子是h=h*3+1的规律得出的:
package com.jll.sort;
public class shellsort {
int[] arr;
int size;
public shellsort() {
super();
}
public shellsort(int size) {
this.size = size;
arr = new int[size];
}
/**
* @param args
*/
public static void main(string[] args) {
shellsort ss = new shellsort(10);
for(int i=0;i<10;i++){
ss.arr[i] = (int) ((math.random()*100)+1);
system.out.print(ss.arr[i]+" ");
}
ss.shellsort();
system.out.println();
system.out.println("after sort:");
for(int i=0;i<10;i++){
system.out.print(ss.arr[i]+" ");
}
}
public void shellsort(){
int h = 1;
while(h<=size/3){
h = h*3+1;
}
for(;h>0;h=(h-1)/3){
for(int i=h;i
int temp = arr[i];
int j = i;
while(j>h-1&&arr[j-h]>temp){
arr[j]=arr[j-h];
j-=h;
}
arr[j]=temp;
}
}
}
}
希望与广大网友互动??
点此进行留言吧!
希尔排序java写法_java高级排序之希尔排序相关推荐
- 希尔排序java写法_Java实现希尔排序
华杰让我看了一道面试题:现有一段程序S,可以对任意n个数进行排序.如果现在需要对n^2个数进行排序,最少需要调用S多少次?(只允许调用S,不可以做别的操作). 看到了这个,我想试试希尔排序,就学学. ...
- 选择排序java代码_JAVA简单选择排序算法原理及实现
简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...
- java中对集合排序,Java如何对集合中的项目排序?
整理一个诀窍java.util.Set是使用的执行java.util.SortedSet,如java.util.TreeSet类.下面的示例向您显示使用java.util.TreeSet该类的结果,其 ...
- java优先队列_Java高级特性增强-多线程
请戳GitHub原文: https://github.com/wangzhiwubigdata/God-Of-BigData 大数据成神之路系列: 请戳GitHub原文: https://github ...
- .net java 泛型_Java高级特性泛型看这一篇就够了
作者:qwer1030274531 出自:ITPUB博客 1.为什么我们需要泛型? 通过两段代码就可以知道为什么需要泛型 /*** * 没有泛型的时候实现加法 */public class NonGe ...
- java高级反射_Java高级特性之反射
老规矩我们还是先提出几个问题,一门技术必然要能解决一定的问题,才有去学习掌握它的价值 一. 什么是反射? 二.反射能做什么? 一. 什么是反射? 用在Java身上指的是我们可以于运行时加载.探知.使用 ...
- java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...
冒泡排序 依次比较相邻的元素,若发现逆顺序,则交换.小的向前换,大的向后换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成. import ...
- 希尔排序基础java代码_java 算法之希尔排序详解及实现代码
摘要:这篇Java开发技术栏目下的"java 算法之希尔排序详解及实现代码",介绍的技术点是"希尔排序详解.实现代码.希尔排序.Java.实现.代码",希望对大 ...
- java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...
本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...
最新文章
- android应用可以访问/dev下设备节点
- Linux引到过程与服务控制
- 选择排序(Select Sort)
- java三国策略手游_策略三国下载-策略三国手游官网版下载-Minecraft中文分享站
- 将视频截取成图片的C++代码
- getvod.php_飞飞影视系统飞飞cms2.8标签大集合
- 苹果开发者账户续费 支付授权失败
- 时差怎么理解_懂的人自然懂,不懂的人再多解释也有时差,故事只能说给懂的人听...
- StringBuilder和StringBuffer的效率比较
- win10开热点后,手机连接显示IP配置失败(或显示正在连接中)
- [机器学习]1模型评估与选择
- 细说C++11中ratio编译期分数(一)
- 一、Composer下载安装
- oracle编程语言是什么意思,OraclePL编程语言的优点介绍
- Win7系统待办下载 纯净版无广告待办软件
- 【RPA学习天地:版本解读】艺赛旗iS-RPA2021.2版本亮点
- Modelsim仿真操作指导
- 基于强化学习的图像配准 - Image Registration: Reinforcement Learning Approaches
- 熊猫儿 | 燕赵风云,风云燕赵
- RBA验厂咨询,RBA认证6.0有哪三个章节名称调整及行为准则改变要点说明
热门文章
- 在WPF TreeView中使用复选框
- 安全漏洞——如何查找和修复它们
- SQL 使用总结二 ( 不同库的日期总结)
- oracle数据库监听频道异常,数据库监听不定期出现异常故障处理
- css 波纹扩散效果
- 小程序picker下拉框选择时间,只需要年和月
- redis安装包_Linux中安装Redis
- ajax获得excel文件流在前端打开_Javascript前端开发:jsonp的原理你真的懂吗?
- allergro音乐术语什么意思_这些关于刀具钢材的专业术语,你都知道是什么意思吗?...
- hibernate clob mysql_Hibernate操作Clob类型数据