/** * 希尔排序 * 简述: * 希尔排序是插入排序的一种改进。将需要排序的序列划分成为若干个较小的子序列,对子序列进行插入排序,通过则插入排序能够使得原来序列成为基本有序。 * 时间复杂度: * * 空间复杂度: * * 优点: * * 缺点: * * 可改进: * * @author CheN * */public class ShellSort { /** * 正序 * @param array * @return */ public static int[] asc(int[] array) { return sort(array, array.length); } /** * 希尔排序 * @param array * @param length * @return */ private static int[] sort(int[] array, int length) { int step = length / 2; // 设置希尔排序的增量 // 增量必须为1,才可得到完整的排序 while (step >= 0) { // for(int i = step ; i < length ; i++) { // 从每一组数字的第二个数字开始,与前面的每一个数字进行比较,如果小,则插入。然后再用该组后续的数字与前面的数字进行比较,再交换。 int temp = array[i]; int j = i - step; while (j >= 0 && array[j] > temp) { array[j + step] = array[j]; j = j - step; } array[j + step] = temp; } step = step / 2; // 缩小增量 } return array; }}
若有错误或不妥之处,敬请谅解并指点。