基本介绍
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。
基本思想
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一个组,算法便终止。
public class ShellSort {
public static void shellSort(int[] arr) {
int len = arr.length;
int temp, gap = len / 2;
while (gap > 0) {
for (int i = gap; i < len; i++) {
temp = arr[i];
int j = i;
while (j >= gap && arr[j - gap] > temp) {
arr[j] = arr[j - gap];
j -= gap;
}
arr[j] = temp;
}
gap = gap / 2;
}
}
public static void main(String[] args) {
int[] arr = {12, 34, 54, 2, 3};
shellSort(arr);
System.out.println("Sorted array: ");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
首先定义了一个名为shellSort
的方法,该方法接收一个整数数组作为输入,并对其进行排序。希尔排序的主要逻辑是,开始时设置一个较大的间隔(gap),然后对间隔为gap的元素序列进行插入排序。然后逐渐减小gap,直到gap为1,此时整个序列成为一组,进行最后一次插入排序。