希尔排序
为什么使用希尔排序
希尔排序可以看做选择排序的一个升级版,在插入排序中我们选择插入点时,需要大量的元素移动,这样会消耗排序的时间。如果我们能够将元素进行分组处理,在指定的组中进行移动元素则会大大减少移动次数,节约排序时间。
希尔排序的基本步骤
定义分组,一般我们使用/2的方式来定义数据的间隔,看下图所示。
采用插入排序对分组中的数据进行排序
参考实现
public int[] sortArray(int[] nums) {
int gap = nums.length / 2;
while (gap > 0) {
for (int i = gap; i < nums.length; i++) {
int tmp = nums[i];
int j;
for (j = i; j >= gap && nums[j - gap] > tmp; j-=gap) {
nums[j] = nums[j - gap];
}
nums[j] = tmp;
}
gap/=2;
}
return nums;
}