shell排序(希尔排序)
步骤
– 将有n个元素的数组分成n/2个数字序列,第1个数据和第n/2+1ge数据为一对
– 一次循环使每一个序列对排好顺序,
– 然后,再变为n/4个序列,再次排序。
– 不断重复上述过程,随着序列减少最后变为一个,也就完成了整个排序。
代码
public class P4_4 {
static final int SIZE = 10;
public 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 (i = r; i < a.length ; i++) {
temp = a[i];
j=i-r;
while (j>=0 && temp<a[j]){
a[r+j] = a[j];
j-=r;
}
a[j+r] = temp;
}
x++;
System.out.println("第"+x+ "步排序为:");
for (h = 0; h < a.length; h++) {
System.out.print(" "+a[h]);
}
System.out.println();
}
}
public static void main(String[] args) {
int[] shuzu = new int[SIZE];
for (int i = 0; i < SIZE; i++) {
shuzu[i] = (int)(100 + Math.random()*(100+1));
}
//
System.out.println("排序前数组为:");
for (int i = 0; i < shuzu.length; i++) {
System.out.print(" "+ shuzu[i]);
}
//
System.out.println();
shellSort(shuzu);
System.out.println("排序后数组为:");
for (int i = 0; i < shuzu.length; i++) {
System.out.print(" "+ shuzu[i]);
}
}
}
运行结果:
排序前数组为:
169 159 130 165 132 103 181 138 196 139
第1步排序为:
103 159 130 165 132 169 181 138 196 139
第2步排序为:
103 138 130 139 132 159 181 165 196 169
第3步排序为:
103 130 132 138 139 159 165 169 181 196
排序后数组为:
103 130 132 138 139 159 165 169 181 196
Process finished with exit code 0