希尔排序是把记录按下标的一定增量分组, 对每组使用直接插入排序算法排序; 随着增量逐渐减少, 每组包含
的关键词越来越多, 当增量减至 1 时, 整个文件恰被分成一组, 算法便终止
public class ShellSort { public static void main(String[] args) { int arr[] = {0, 8, 9, 1, 7, 2, 3, 5, 4, 6}; shellSort(arr); System.out.println(Arrays.toString(arr)); } private static void shellSort(int[] arr) { int temp = 0; for (int gap = arr.length / 2; gap > 0; gap /= 2) { for (int i = gap; i < arr.length; i++) { for (int j = i - gap; j >= 0; j -= gap) { if (arr[j] > arr[j + gap]) { temp = arr[j + gap]; arr[j + gap] = arr[j]; arr[j] = temp; } } } } // int temp = 0; // for (int i = 5; i < arr.length; i++) { // for (int j = i - 5; j >= 0; j -= 5) { // if (arr[j] > arr[j + 5]) { // temp = arr[j + 5]; // arr[j + 5] = arr[j]; // arr[j] = temp; // } // } // } // System.out.println(Arrays.toString(arr)); // for (int i = 2; i < arr.length; i++) { // for (int j = i - 2; j >= 0; j -= 2) { // if (arr[j] > arr[j + 2]) { // temp = arr[j + 2]; // arr[j + 2] = arr[j]; // arr[j] = temp; // } // } // } // System.out.println(Arrays.toString(arr)); // // for (int i = 1; i < arr.length; i++) { // for (int j = i - 1; j >= 0; j -= 2) { // if (arr[j] > arr[j + 1]) { // temp = arr[j + 1]; // arr[j + 1] = arr[j]; // arr[j] = temp; // } // } // } // System.out.println(Arrays.toString(arr)); } }