1. 希爾排序
1.1 希爾排序的基本介紹
希爾排序是加強版的插入排序,相對與普通的插入排序做了優化,比普通的插入排序多了一個步長的概念
1.2 希爾排序思想
就是把數據下標按照一定的步長進行分組,然後每組分別用普通插入排序進行排序,知道步長減至爲 1 時,算法終止。
1.3 希爾排序的時間複雜度和空間複雜度等
算法名稱 | 平均時間複雜度 | 最好情況 | 最壞情況 | 空間複雜度 | 穩定性 |
---|---|---|---|---|---|
希爾排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不穩定 |
2. 代碼演示
/**
* @author shengjk1
* @date 2020/4/9
*/
public class ShellSort {
public static void main(String[] args) {
int[] arr = {1, -2, 2, -3, 5, 0};
for (int gap = arr.length / 2; gap > 0; gap /= 2) {
for (int j = gap; j < arr.length; j += gap) {
int insertIndex = j;
int insertValue = arr[insertIndex];
while (insertIndex - gap >= 0 && arr[insertIndex - gap] > insertValue) {
arr[insertIndex] = arr[insertIndex - gap];
insertIndex -= gap;
}
arr[insertIndex] = insertValue;
System.out.printf("第%d次遍歷 insertIndex %d arr:%s", j, insertIndex, Arrays.toString(arr));
System.out.println();
}
}
}
}
代碼基本與普通插入排序一致。