public class Shell {
/*
* Shell排序(缩小增量排序)是比较高效的排序算法
* 流程:
* 1.将有N个元素的数组分为N/2个数字序列,第一个数据和第N/2+1个数据为一对。
* 2.一次循环使每一个序列对排好顺序。
* 3.再将数组分成N/4个序列
* 4.重复循环,直到序列变成一个。
*/
static final int SIZE = 12;
static void shellSort(int[] a){
int i,j,h;
int r,temp;
int x=0;
for(r=a.length/2;r>=1;r/=2){ //for(初始化;条件;增量) 用来分组
for(i=r;i<a.length;i++){
temp=a[i]; //将分组中的第i位
j=i-r; //第i-(增量)位
while(j>=0&&temp<a[j]){
a[j+r]=a[j]; //将a[i]和a[j]位交换,小的在前。
j-=r;
}
a[j+r] =temp;
}
x++;
System.out.println("第"+x+"步排序结果:");
for(h=0;h<a.length;h++){
System.out.println(""+a[h]);
}
System.out.println("\n");
}
}
public static void main(String[] args){
int[] a = new int[SIZE];
int i ;
for(i=0;i<SIZE;i++){
a[i]=(int)(100+Math.random()*(100+1));
}
System.out.println("before: \n");
for(i=0;i<SIZE;i++){
System.out.println(a[i]+"");
}
shellSort(a);
System.out.println("after: \n");
for(i=0;i<SIZE;i++){
System.out.println(a[i]+"");
}
}
}