算法描述
希尔排序是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
图解
参考代码
public class ShellSort {
public static void main(String[] args) {
int[] arr = {49, 38, 65, 97, 76, 13};
shellSort(arr);
System.out.println(Arrays.toString(arr));
}
private static void shellSort(int[] arr) {
for (int gap = arr.length / 2; gap > 0; gap = gap / 2) {//gap增量
for (int i = gap; i < arr.length; i++) {//距离为gap的可能
int j = i;
int temp = arr[i];
while (j - gap >= 0 && arr[j - gap] > temp) {
arr[j] = arr[j - gap];
j = j - gap;
}
arr[j] = temp;
}
}
}
}
算法性能
-
时间复杂度
O(1.3)
-
空间复杂度
O(1)
-
算法稳定性
不稳定