博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
希尔排序及希尔排序java代码
阅读量:6180 次
发布时间:2019-06-21

本文共 911 字,大约阅读时间需要 3 分钟。

原文链接:

由上图可看到希尔排序先约定一个间隔(图中是4),然后对0、4、8这个三个位置的数据进行插入排序,然后向右移一位对位置1、5、9进行插入排序按照此规律直到全部参与了排序。然后将间隔约定为4-1=3,然后继续进行如上的排序方法。具体过程如下:

9 1 2 3 0 4 5 7 6 8 

Setp 1 经过间隔为4排序后变成 : 0 1 2 3 6 4 5 7 9 8

Setp 2 经过间隔为3排序后变成 : 0 1 2 3 6 4 5 7 9 8

Setp 3 经过间隔为2排序后变成 : 0 1 2 3 5 4 6 7 9 8

Setp 4 经过间隔为1排序后变成 : 0 1 2 3 4 5 6 7 9 8

 

减小间隔:对于大的数组一开始的间隔也应该比较大,而且间隔的缩减幅度也应该变大了,比如对于一个1000大小的数组进行排序可以采用间隔为:364、121、40、13、4、1,这里的间隔序列由knuth提出,数列以逆向的形式从1开始,通过递归表达式h=3*h+1来产生,初始值为1.(其他方法也可以产生序列)如下表

 

下面是希尔排序java代码

public static void shellSort(long[] arr , int eleNum){    int i,j;    long temp;    // 先求出h    int h = 1;    while(h < eleNum / 3)	h = 3 * h + 1; // 1、4    while (h > 0) {	for(i = h ; i < eleNum ; i = i + h) {	    // 对子数组进行排序	    temp = arr[i];	    j = i;	    while(j > h-1 && temp <= arr[j-h]) {	        arr[j] = arr[j-h];		j-=h;	    }	        arr[j] = temp;        }	h = (h-1)/3;    }    System.out.println(Arrays.toString(arr));}

转载地址:http://debda.baihongyu.com/

你可能感兴趣的文章
年薪六十万,你还缺些什么
查看>>
[转载] 中国好声音 120817
查看>>
Monte Carlo tree search 学习
查看>>
使用golang的slice来模拟栈
查看>>
【计算机网络】TCP关闭连接问题及注意
查看>>
【评分】第四次作业--项目选题报告(团队)
查看>>
增加wamp64 PHP支持版本
查看>>
重复枚举和不重复枚举
查看>>
支持metro style app 的框架已经出来了
查看>>
windows 10 自适应布局
查看>>
mybatis insertUseGeneratedKeys
查看>>
自动生成Makefile--autotools使用 - zheng_he_xiang的日志 - 网易博客
查看>>
BAT实现照片文件批量改名
查看>>
海量数据处理专题(六)——双层桶划分
查看>>
Senior Software Engineer – Search Relevance in China - A9
查看>>
原来OD 线程 在这里显示 囧啊
查看>>
A.1.4,6,7-控制结构(if else),循环结构(for,while,do while),循环结构(switch)
查看>>
ECSHOP之transport.js/run() error:'process_request' 未定义
查看>>
dp学习笔记4
查看>>
SetTimer 与回调函数
查看>>