数据结构-希尔排序
一. 介绍
希尔排序是把记录按下标的一定增量分组, 对每组使用直接插入排序算法排序; 随着增量逐渐减少, 每组包含
的关键词越来越多, 当增量减至 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));
}
}