之前一直只了解希尔排序的过程,没具体写过代码,今天补上。
基本思路:
1.选定步长gap,比较元素a[i]和a[i+gap]的大小,并调整顺序,逐步调整gap值,直到gap值为1
2.我一般采用初始gap为length/2,,然后逐步递减
public class ShellSort {
private static int N = 15;
static Random rand = new Random();
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
test_Shellsort_ASC();
}
//测试希尔排序
private static void test_Shellsort_ASC() {
// TODO Auto-generated method stub
int[] A = new int[N];
for (int i = 0; i < N; i++) {
A[i] = rand.nextInt(1000);
}
System.out.println("排序前:");
print(A);
shellsort(A);
System.out.println("排序后");
print(A);
}
private static void shellsort(int[] a) {
// TODO Auto-generated method stub
int gap = a.length/2;
for(int i = gap;i>0;i--){
for(int j = 0;j<a.length-i;j++){
if(a[j]> a[j+i]){
int temp = a[j];
a[j] = a[j+i];
a[j+i] = temp;
}
}
}
}
private static void print(int[] A) {
// TODO Auto-generated method stub
for (int i = 0; i < A.length; i++) {
System.out.print(A[i] + "\t");
}
System.out.println();
}
}
实验结果:
排序前:
765 121 353 792 206 692 492 377 306 184 27 871 793 802 889
排序后
27 121 184 206 306 353 377 492 692 765 792 793 802 871 889