●希尔排序
希尔排序法介绍
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。
希尔排序法基本思想:
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
希尔排序代码
import java.util.Arrays;
public class shellSort {
public static void main(String[] args) {
int[] arr = {5,6,3,1,8,4,9,2,7};
/* int[] arr = new int[8];
for (int i=0;i<arr.length;i++){
arr[i] = (int)(Math.random()*8);
}
*/
shellsort(arr);
System.out.println(Arrays.toString(arr));
}
//希尔排序
public static void shellsort(int[] arr){
//增量gap, 变逐步的缩小增量
for (int gap=arr.length/2;gap>0;gap/=2){
//从第gap个元素,逐个对其所在的组进行直接插入排序
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=j-gap;
}
//当退出while后, 就给temp找到插入位置
arr[j] = temp;
}
}
}
}
}
查看80000个随机数排序时间 代码
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<arr.length;i++){
arr[i] = (int)(Math.random()*80000);
}
System.out.println("排序前");
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date1Str = simpleDateFormat.format(date);
System.out.println("排序前的时间是="+date1Str);
shellsort(arr);
Date date2 = new Date();
String date2Str = simpleDateFormat.format(date2);
System.out.println("排序后的时间是="+date2Str);
}
//希尔排序
public static void shellsort(int[] arr){
//增量gap, 变逐步的缩小增量
for (int gap=arr.length/2;gap>0;gap/=2){
//从第gap个元素,逐个对其所在的组进行直接插入排序
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=j-gap;
}
//当退出while后, 就给temp找到插入位置
arr[j] = temp;
}
}
}
}
}