希尔排序以插入排序为基础。
希尔排序的每一趟需要选择一个步长,并按照步长进行插入排序。
/**
* 希尔排序算法
* @param v
* @return
*/
public int shellSort(T v[]) {
int n = v.length;
for (int gap = n / 2; gap > 0; gap = gap / 2) {
for (int i = gap; i < n; i++) {
T temp = v[i];
int j = i - gap;
for (; j > -1 && temp.compareTo(v[j]) < 0; j -= gap) {
v[j + gap] = v[j];
}
v[j + gap] = temp;
}
}
return 0;
}