1、描述:希尔排序(查看定义)是直接插入排序的一种扩展算法,对于一个有序序列或者基本有序序列,要在插入一个较小的元素的时候就要从后向前(查看原因)不断的移动,如果序列是相当大的,这种移动是十分耗时的。改进的办法就是将每次从后向前移动的步长增大,这样移动比较的次数就会大大的减少。步长的计算一般由公式:h
= 3*h+1算出,步长由大逐渐减少至1,当减到1的时候,也就是一般的直接插入排序了,但这个时候序列是相对有序的,保证了相对较小的元素不会出现在序列的最后面,从而减少了移动的次数。
2、Java代码实现
public class ShellSort2 {
public static void main(String[] args) {
int a[] = {-5,6,0,4,-1,7,8,26,10,-9};
shell0405(a);
String str ="";
for(int k=0;k<a.length;k++){
str += a[k] + ",";
}
System.out.println(str);
}
public static void shell0405(int[] a){
int h = 1;
int temp;
int j;
while(h<a.length/3){
h = h*3 + 1;
}
while(h>0){
for(int i=h;i<a.length;i++){
if(a[i]<a[i-h]){
temp = a[i];
j = i;
do{
a[j] = a[j-h];
j -= h;
}while(j-h>=0&&a[j-h]>temp);
a[j] = temp;
}
}
h = (h-1)/3;
}
}
}
分享到:
相关推荐
此希尔排序算法采用增量减半的方法来进行数据的排序,内有部分注释
python数据结构与算法分析,希尔排序法实现,希尔排序.py
c++平台上实现希尔排序算法,完整的源代码,vc平台运行。
希尔排序法,最经典的排序法,但不是容易懂。包括希尔插入排序,希尔交换排序
通过这个程序就可以实现希尔排序,对数据用希尔进行排序
这是希尔排序算法的一个关键特点。 希尔排序的时间复杂度为O(n^2),但实际上它的性能比插入排序要好得多,特别是在大型列表上。希尔排序的性能取决于间隔序列的选择,但是目前还没有一种最优的间隔序列。
C语言实现SHELL排序算法!C语言实现SHELL排序算法!
希尔排序的源代码; 平台:CentOS release 5.4 (Final) 编译器:GCC 4.3.2
C语言版的希尔排序算法,可以有按照升序、降序两种方式进行排序
C#实现希尔排序算法.大家可以学习学习。
(希尔排序算法).doc(希尔排序算法).doc(希尔排序算法).doc(希尔排序算法).doc 计算机算法分析必备
使用希尔排序法对一维数组进行排序,程序很好运行,帮助大家学习
C#使用希尔排序法对一维数组进行排序
希尔排序算法python实现,可实现动态图实现,算法详细书名:https://blog.csdn.net/qq_28531269/article/details
希尔排序Java语言的易懂解释,本人Google搜索求得最佳答案,希望可以与朋友分享,给同样疑惑的朋友带来帮助。
数据结构排序算法中的希尔(shell)排序,可供初学者参考
完全正确的希尔排序法源程序,在VC6.0上可以直接编译,执行。解释详细,任何人都绝对能看懂程序的执行过程。
它首先将待排序的数组元素按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个数组被分为一组,算法便终止。希尔排序的时间复杂度与增量序列...
希尔排序(Shell Sort)是插入排序的一种,也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列(由相隔...