希尔是在插入排序的基础上实现的。插入的话不是像扑克牌那样的插入嘛,i与i-1进行比较~~~
希尔则是将其步从1换成h
因为插入排序是如果是几本有序的那么就快,或者是小的数据会快。
那么将其变成h,原来是1是步长,每次与之比较的位置是i+h 原来的插入是i+1去比较
利用h比较一次,变得对于h来说是相对有序的,减小h,再次执行,直到h=1。也就是最后一次的插入排序
http://blog.csdn.net/jianyuerensheng/article/details/51258460
这个图看一下就明白了
package sorts;
import object.Example;
public class xier extends Example {
public static void sort(Comparable[] a){
int N =a.length;
int h = 1;
while(h<N/3){h=3*h+1;}
System.out.println(h);
while(h>=1){
for (int i=h;i<N;i++){
for(int j=i;j>=h&&less(a[j], a[j-h]);j-=h){
exch(a, j, j-h);
}
}
h=h/3;
}
}
public static void main(String[] a){
Comparable[] ac = new Comparable[]{3,2,4,1,5,1,6,4,3,7,9,0,8,7,9,3,2};
sort(ac);
show(ac);
}
}