package sort;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
//希尔排序之交换式
public class ShellSort {
public static void main(String[] args) {
int arr[]=new int[80000];
for (int i=0;i<80000;i++){
arr[i]=(int)(Math.random()*8000000);
}
// int arr[]={10,89,69,58,34,89,79,43,24,56};
Date date1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
String date1Str =simpleDateFormat.format(date1);
System.out.println("排序前的时间是"+date1Str);
shellSort2(arr);
Date date2 = new Date();
String date2Str =simpleDateFormat.format(date2);
System.out.println("排序后的时间是"+date2Str);
}
// public static void shellSort(int[] arr) {
// int temp = 0;
// //记录轮次
// int count=0;
// //每次除以二得到移动的间隔
// for (int gap = arr.length / 2; gap > 0; gap /= 2) {
//
// for (int j=gap; j < arr.length; j++) {
// for (int i = j - gap; i >= 0; i -= gap) {
// if (arr[i] > arr[i + gap]) {
// //元素交换
// temp = arr[i];
// arr[i] = arr[i + gap];
// arr[i + gap] = temp;
// }
//
// }
// }
System.out.println("第"+(++count)+"轮排序"+Arrays.toString(arr));
// }
// }
public static void shellSort2(int[] arr){
int count=0;
for (int gap = arr.length / 2; gap > 0; gap /= 2) {
for (int i=gap; i < arr.length; i++) {
int j=i;
int temp=arr[j];
if (arr[j]<arr[j-gap]){
while (j-gap>=0&&temp<arr[j-gap]){
arr[j]=arr[j-gap];
j-=gap;
}
arr[j]=temp;
}
}
}
// System.out.println("第"+(++count)+"轮排序"+Arrays.toString(arr));
}
}
|