希尔排序
希尔排序通过增量的方式进行分组,然后组之间采用插入排序进行排序,再依次减小增量
import java.util.Arrays;
public class ShellSort {
//希尔排序
public static void sort(Comparable a[]){
//1.根据数组长度,确定增长量h的初始值
int h = 1;
while(h<a.length/2){
h = 2*h+1;
}
//2.希尔排序
while(h>=1) {
//排序
//2.1找到待插入的元素
for (int i = h; i < a.length; i++) {
//2.2把待插入的元素插入到序列
for (int j = i; j >= h; j -= h) {
//待插入的元素是a[j],比较a[j]和a[j-h]
if (greater(a[j-h], a[j])) {
//交换元素
exchange(a, j-h, j);
} else {
//待插入元素已经找到了合适位置
break;
}
}
}
//减小h的值
h = h / 2;
}
}
//判断两个数的大小
public static boolean greater(Comparable a,Comparable b){
return a.compareTo(b)>0;
}
//元素i和j交换位置
public static void exchange(Comparable a[],int i,int j){
Comparable temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}