希尔排序对于多达几千个数据项的,中等大小规模的数组排序表现良好,希尔排序不像快速排序和其它时间复杂度为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高级排序之希尔排序相关推荐

  1. 希尔排序java写法_Java实现希尔排序

    华杰让我看了一道面试题:现有一段程序S,可以对任意n个数进行排序.如果现在需要对n^2个数进行排序,最少需要调用S多少次?(只允许调用S,不可以做别的操作). 看到了这个,我想试试希尔排序,就学学. ...

  2. 选择排序java代码_JAVA简单选择排序算法原理及实现

    简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...

  3. java中对集合排序,Java如何对集合中的项目排序?

    整理一个诀窍java.util.Set是使用的执行java.util.SortedSet,如java.util.TreeSet类.下面的示例向您显示使用java.util.TreeSet该类的结果,其 ...

  4. java优先队列_Java高级特性增强-多线程

    请戳GitHub原文: https://github.com/wangzhiwubigdata/God-Of-BigData 大数据成神之路系列: 请戳GitHub原文: https://github ...

  5. .net java 泛型_Java高级特性泛型看这一篇就够了

    作者:qwer1030274531 出自:ITPUB博客 1.为什么我们需要泛型? 通过两段代码就可以知道为什么需要泛型 /*** * 没有泛型的时候实现加法 */public class NonGe ...

  6. java高级反射_Java高级特性之反射

    老规矩我们还是先提出几个问题,一门技术必然要能解决一定的问题,才有去学习掌握它的价值 一. 什么是反射? 二.反射能做什么? 一. 什么是反射? 用在Java身上指的是我们可以于运行时加载.探知.使用 ...

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

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

  8. 希尔排序基础java代码_java 算法之希尔排序详解及实现代码

    摘要:这篇Java开发技术栏目下的"java 算法之希尔排序详解及实现代码",介绍的技术点是"希尔排序详解.实现代码.希尔排序.Java.实现.代码",希望对大 ...

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

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

最新文章

  1. android应用可以访问/dev下设备节点
  2. Linux引到过程与服务控制
  3. 选择排序(Select Sort)
  4. java三国策略手游_策略三国下载-策略三国手游官网版下载-Minecraft中文分享站
  5. 将视频截取成图片的C++代码
  6. getvod.php_飞飞影视系统飞飞cms2.8标签大集合
  7. 苹果开发者账户续费 支付授权失败
  8. 时差怎么理解_懂的人自然懂,不懂的人再多解释也有时差,故事只能说给懂的人听...
  9. StringBuilder和StringBuffer的效率比较
  10. win10开热点后,手机连接显示IP配置失败(或显示正在连接中)
  11. [机器学习]1模型评估与选择
  12. 细说C++11中ratio编译期分数(一)
  13. 一、Composer下载安装
  14. oracle编程语言是什么意思,OraclePL编程语言的优点介绍
  15. Win7系统待办下载 纯净版无广告待办软件
  16. 【RPA学习天地:版本解读】艺赛旗iS-RPA2021.2版本亮点
  17. Modelsim仿真操作指导
  18. 基于强化学习的图像配准 - Image Registration: Reinforcement Learning Approaches
  19. 熊猫儿 | 燕赵风云,风云燕赵
  20. RBA验厂咨询,RBA认证6.0有哪三个章节名称调整及行为准则改变要点说明

热门文章

  1. 在WPF TreeView中使用复选框
  2. 安全漏洞——如何查找和修复它们
  3. SQL 使用总结二 ( 不同库的日期总结)
  4. oracle数据库监听频道异常,数据库监听不定期出现异常故障处理
  5. css 波纹扩散效果
  6. 小程序picker下拉框选择时间,只需要年和月
  7. redis安装包_Linux中安装Redis
  8. ajax获得excel文件流在前端打开_Javascript前端开发:jsonp的原理你真的懂吗?
  9. allergro音乐术语什么意思_这些关于刀具钢材的专业术语,你都知道是什么意思吗?...
  10. hibernate clob mysql_Hibernate操作Clob类型数据