算法思想
分组插入排序:将序列划分为子序列,分别进行直接插入排序,再缩减增量进行排序。
基于插入排序
算法时间复杂度nlogn,空间复杂度1
适用于大型数组
Java实现
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] a = { 2, 4, 3, 5, 6, 3, 1 };
sort(a);
System.out.println(Arrays.toString(a));
}
public static void sort(int[] a) {
int N = a.length;
int h = 1;
while (h < N / 3)
h = 3 * h + 1;
while (h >= 1) {
for (int i = h; i < N; i++) {
for (int j = i; j >= h && a[j] < a[j-h]; j -= h) {
int temp = a[j];
a[j] = a[j - h];
a[j - h] = temp;
}
}
h /= 3;
}
}
}