涉及到数组clone,随机数生成
public class ShellSort {
public static void main(String[] args) {
int[] arr = new int[10000]; //需要指定数组的长度
//打印 1到10000之间的随机数
int radom=0;
for(int i=0;i<10000;i++){
arr[i] = (int)(1+Math.random()*(10000+1));
}
int[] arr1 = arr.clone();//数组克隆
long startTime = System.currentTimeMillis();//获取当前时间
//doSomeThing(); //要运行的java程序
sort(arr);
long endTime = System.currentTimeMillis();
System.out.println("希尔排序程序运行时间:"+(endTime-startTime)+"ms");
long startTime1 = System.currentTimeMillis();//获取当前时间
//doSomeThing(); //要运行的java程序
sort1(arr1);
long endTime1 = System.currentTimeMillis();
System.out.println("普通插入排序程序运行时间:"+(endTime1-startTime1)+"ms");
}
/*希尔排序 针对有序序列在插入时采用交换法*/
public static void sort(int [] arr){
//增量gap, 并逐渐缩小增量
int j;
for(int gap =arr.length/2;gap>0;gap/=2){
for(int i=gap;i< arr.length;i++){
int tmp=arr[i];
for(j=i;j>=gap && tmp<arr[j-gap];j-=gap){
arr[j]=arr[j-gap];
}
arr[j]=tmp;
}
}
}
//插入排序
public static void sort1(int [] arr){
int j;
for(int i=1;i< arr.length;i++){
int tmp=arr[i];
for(j=i;j>=1 && tmp<arr[j-1];j-=1){
arr[j]=arr[j-1];
}
arr[j]=tmp;
}
}
}
希尔排序,当gap=1,称为插入排序