1.希尔排序
希尔排序法又称缩小增量法。是直接排序的优化。shell
2.基本思想
希尔排序法的基本思想是:先选定一个整数,把待排序文件中全部记录分红一个组,全部距离为同样的记录分在同一组内,并对每一组内的记录进行排序。而后取整数一半的值,重复上述分组和排序的工做。当值到达1时,全部记录在同一组内排好序。数组
3.图解(按从小到大排序,以6个数字为例)
①将整个数组分组gap=arr.length/2;如图颜色同样的为一组。
②将颜色同样的值进行比较,小的换到前面,大的换到后面;再进行分组gap=gap/2,如图颜色同样的为一组。
③重复上述步骤。
④最终排好的序列如图。markdown
4.代码实现ide
public static void shellSort(int[] array) { int gap = array.length; while (gap > 1) { gap = gap / 2; insertGap(array, gap); } insertGap(array, 1); } public static void insertGap(int[] array, int gap) { for (int bound = 1; bound < array.length; bound++) { int tmp = array[bound]; int cur = bound - gap; for (cur = bound - gap; cur >= 0; cur -= gap) { if (array[cur] > tmp) { array[cur + gap] = array[cur]; } else { break; } } array[cur + gap] = tmp; } }