插入
排序是有效时,它在数据几乎是定制的,即线性排序的效率。
但是插入排序通常效率不高,因为插入排序只能一次移动一位。
希尔排序是根据它的设计者Hill的
名字命名(Donald Shell),这是发表在1959。教科书和
参考手册的一些旧版本调用算法壳Metzner
希尔排序的基本思想:首先把一个小于n的整数d1为增量,将所有记录到D1组。所有的D1的距离的多个记录都放在同一组。第一,直接插入排序是在每个组;然后,把第二增量<D1 D2重复上述分组和排序直到增量dt=1(DT < dt-l <)了。< < D1,D2),所有的记录都放在同一组进行直接插入排序。
这种
方法实质上是一种包插入方法。
例1:
复制代码代码如下所示:
*希尔排序,也称为递减递增排序算法,是插入排序的一种更有效和改进的版本。
*
*希尔排序是基于插入排序的以下两个
属性,并提出了一种改进的方法。
*
*插入排序是高效
运行的时候,就几乎已经预订数据,即线性排序的效率可以达到。
*但是插入排序通常效率不高,因为插入排序只能一次移动一位。
*
* /
功能希尔(列表){
VaR的差距= math.floor(list.length / 2);
当(间隙> 0){
对(我=差距;我< list.length;i++){
列表= { };
对于(j = i;j)空白列表
列表{列表=;
}
列表{ = } =
温度;
}
差距= math.floor(缺口2);
}
返回列表;
};
测试
var arr = { 2, 1, 3,12, 5, 66,23, 87, 15,32 };
ShellSort(ARR);
例2:
复制代码代码如下所示:
/ / document.write(Hill排序、插入排序的
升级,1959壳了。当增量
正确时,时间复杂度为n 1.3倍;
/ / document.write()
数组=新数组(12, 25, 32,16, 18, 27,59, 69, 36);
功能希尔(阵列){
Var J,我,V,H = 1,S = 3,k,n = array.length;
var结果;
var计数= 0;
而(h<N)
h=1;
当(h = 1){
H =(H-1) / S;
对于(k = 0;k;h;k +)
对于(i = H,h,j = i;;i;n;i =;h,j = i){
v =数组{ };
虽然(真实)
如果((j = h)数组{ } = 0 V)
数组{ = } =数组{ };
其他的
打破;
数组{;
}
计数+;
结果++ +计数+ 是一种全部:;
对于(n = 0 n<VaR;array.length;n + +){
结果
}
}
返回结果;
}
/ / shallsort(阵列);
/ / document.write();