希尔排序就是加强版的插入排序,在插入排序的基础上引入了步长。
复杂度 平均 O(n^1.3) 最好O(n) 最差O(n^s)[1
public static void shellSort(int[] a) {
for (int d = a.length/2; d > 0; d = d/2) {
// 插入排序
for(int i = d; i < a.length; i=i+d) {
int tmp = a[i];
int j = i - d;
while(j >= 0 && tmp < a[j]) {
a[j+d] = a[j];
j-=d;
}
a[j+d] = tmp;
}
}
}
原始版本的插入排序
public static void insertSort(int[] a) {
for (int i = 1; i < a.length; i++) {
int tmp = a[i];
int j = i - 1;
while(j >= 0 && tmp < a[j]) {
a[j+1] = a[j];
j--;
}
a[j+1] = tmp;
}
}