希尔排序算法
分为交换法和移步法并测试时间
package com.wmq.demo01.sort;
import java.util.Arrays;
/**
* 希尔排序
*/
public class ShellSort {
public static void main(String[] args) {
//int[] arr = {1,-7,39,4,5};
int arr[] = new int[70000];
for (int i = 0; i < 70000; i++) {
arr[i] = (int)(Math.random()*800000);
}
long start = System.currentTimeMillis();
sort(arr);
long end = System.currentTimeMillis();
System.out.println("一共消耗了"+(end-start)+"毫秒");
}
public static void sort(int arr[]){
//交换法
/*int temp;
boolean flag = false;
for (int gap = arr.length/2; gap > 0; gap/=2) { //gap为每组成员相隔的步数
for (int i = gap; i < arr.length; i++) {
for (int j = i-gap; j >=0 ; j -=gap) {
if (arr[j]>arr[j+gap]){
flag = true;
temp = arr[j];
arr[j] = arr[j+gap];
arr[j+gap] = temp;
}
if (!flag){
break;
}else {
flag = false;
}
}
}
}*/
//移位法
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];
while (j-gap>=0 && temp<arr[j-gap]){
arr[j] = arr[j-gap];
j-=gap;
}
if (j!=i){
arr[j] = temp;
}
}
}
}
}