希尔排序(ShellSort)又称缩小增量排序,与插入排序的有着一曲同工之妙,可以认为它是插入排序的升级版,建议看一下我之前写的关于插入排序的博客。希尔排序把所有相同间隔的分为一组,把小于当前值的所有向后移,直到当前值比某个值大,此时停止移动,并于该值进行交换。
代码:
/**
* 迭代希尔排序(缩小增量排序)
* @param arr
*/
static void shellSort(int[] arr) {
//不断缩地缩小增量
for(int interval = arr.length/2;interval>0;interval = interval/2) {
for(int i=interval;i<arr.length;i++) {//每组的间隔
//把位置为i的元素插入到前面
int target = arr[i];
int j = i-interval;
while(j>-1 && target<arr[j]) {
arr[j+interval] = arr[j];
j -=interval;
}
arr[j+interval] = target;
}
}
}
最后请你思考一下为什么希尔排序要比插入排序快?