package com.iamitman.sort;
import java.util.Arrays;
/**
* 希尔排序:
* 改善了插入排序,将区间段从1改成自定义的 >1 的 increment
* 即当increment=1时就是插入排序
*
* @param <T>
*/
public class ShellSort<T extends Comparable> {
public T[] sort(T[] t) {
int length = t.length;
int increment = length / 3 + 1; // 此处可自定义,increment=1时就是插入排序
for (int i = 0; i < length - increment; i++) {
increment = increment / 3 + 1;
if (t[i + increment].compareTo(t[i]) < 0) {
T temp = t[i + increment];
int j = i;
while (j >= 0 && t[j].compareTo(temp) > 0) {
t[j + increment] = t[j];
j = j - increment;
}
t[j + increment] = temp;
}
}
return t;
}
public static void main(String[] args) {
ShellSort sort = new ShellSort();
Integer[] example = {6, 4, 2, 3, 5, 1, 7, 10, 8, 9};
System.out.println(Arrays.toString(sort.sort(example)));
}
}