public class Main {
public static void main(String[] args) {
int[] arr = {0, 2, 1, 5, 8, 2, 4, 3, 7, 6, 5};
shellSort(arr, arr.length);
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
public static void shellSort(int[] arr, int n) {
for(int gap = n / 2; gap >= 1; gap /= 2) {
for(int i = 0; i < gap; i++) {
for(int j = i + gap; j < n; j += gap) {
if(arr[j] < arr[j-gap]) {
int temp = arr[j];
int k = j - gap;
while(k >= 0 && arr[k] > temp) {
arr[k + gap] = arr[k];
k -= gap;
}
arr[k + gap] = temp;
}
}
}
}
}
}
1、gap 从 n/2 ,到1
2、相对有序时,直接插入法效率会很高
3、希尔排序时间复杂度n的1.3次方,不稳定