/** * shell排序 * * 希尔排序(shellsort)又叫增量递减(diminishing increment)排序,是由D.L. * Shell发明的,这个算法是通过一个逐渐减小的增量使一个数组逐渐趋近于有序从而达到排序的目的。 * * 假设有一个数组int data[16] = {...}。 首先将这个增量设为16 / 2 = 8, 这样就将这个数组分成了8个子数组,它们的索引是0, 8 * 1, 9 2, 10等等 。对这些子数组进行排序。然后再使增量为8 / 2 = 4,这样就将原数组分成了4个子数组,它们的索引分别是0, 4, 8, 12 * 1, 5, 9, 13等等。再对这四组数进行排序,直到增量为1。 * * @author **** * */ public class ShellSort { @SuppressWarnings({ "rawtypes", "unchecked" }) public static void shellSort(Comparable[] data) { int j; for (int gap = data.length / 2; gap > 0; gap /= 2) { for (int i = gap; i < data.length; i++) { Comparable temp = data[i]; for (j = i; j >= gap && temp.compareTo(data[j - gap]) < 0; j -= gap) { data[j] = data[j - gap]; } data[j] = temp; } } } @SuppressWarnings("rawtypes") public static void main(String[] args) { Comparable[] data; data = new Comparable[] { 6, 7, 3, 0, 2, 5, 13, 10, 11, 12 }; for (int i = 0; i < data.length; i++) System.out.print(data[i] + " "); System.out.println(); shellSort(data); System.out.println(); for (int i = 0; i < data.length; i++) System.out.print(data[i] + " "); } }