希尔排序是插入排序的一种改进版本,它通过将数组分成若干个子序列来进行排序,然后对这些子序列进行插入排序。希尔排序的主要思想是先将数组分成若干个子序列,对每个子序列进行插入排序,然后逐渐减小子序列的长度,最终完成整个数组的排序。希尔排序的时间复杂度取决于步长序列的选择,通常情况下时间复杂度为O(nlogn)。
public class ShellSort {
public static void shellSort(int[] arr) {
int n = arr.length;
for (int gap = n/2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
int temp = arr[i];
int j;
for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
arr[j] = arr[j - gap];
}
arr[j] = temp;
}
}
}
public static void main(String[] args) {
int[] arr = {64, 34, 25, 12, 22, 11, 90};
System.out.println("没有排序前的数组 " + Arrays.toString(arr));
shellSort(arr);
System.out.println("排序后的数组 " + Arrays.toString(arr));
}
}