希尔排序
希尔排序是将数据分组,然后进行快速排序
优点是无需大量移动即可实现排序。
代码
public class ShellSort {
/**
* @param args
*/
public static void main(String[] args) {
int[] array1 = { 3, -1, 9, 10, -2, 5, 1 };
// 创建要给80000个的随机的数组
int[] array = new int[800000];
for (int i = 0; i < 800000; i++) {
array[i] = (int) (Math.random() * 800000); // 生成一个[0, 8000000) 数
}
Date data1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String date1Str = simpleDateFormat.format(data1);
System.out.println("希尔排序前的时间是=" + date1Str);
int ran2 = (int) (Math.random() * 800000);
System.out.println(array[ran2]);
sort2(array);
Date data2 = new Date();
String date2Str = simpleDateFormat.format(data2);
System.out.println("希尔排序后的时间是=" + date2Str);
System.out.println();
/*
* for(int i=0;i<array.length;i++) { System.out.print(array[i]+" "); }
*/
}
public static void sort2(int[] array) {
for (int gap = array.length / 2; gap > 0; gap /= 2) {
//步长
for (int i = gap; i < array.length; i++) {
int j = i; //插入的数据下标
int temp = array[j]; //插入的数据
// if(array[j]<array[j-gap]) {
while (j - gap >= 0 && temp < array[j - gap]) {
array[j] = array[j - gap];
j -= gap;
}
array[j] = temp;
}
// }
}
/*
* for(int i = 0;i>1;i/=8000000) { System.out.print(array[i]+" "); }
*
* System.out.println(array);
*/
}
}