4.希尔排序
(1)基本思想:
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法进行排序:随着增量不断减少,每组包含的元素个数不断增加,当增量为1时,整个文件恰被分为一组,算法便终止了。
(2)希尔排序示意图:
图解说明:
a.总共要进行 【gap = arr.length / 2 到 gap =1 ,且每次增量减少为原来一半,即gap = gap /2】 轮
b.每一轮中就是对于每组的元素的直接插入排序
c.注意每一轮中的直接插入排序并不是把某一组全部排完再排其他组,而是每一组排一次,轮流来。
(3)代码实现:
public void shellSort(int[] arr){
int gap = 0;
int j;
//不断缩减增量gap
for(gap = arr.length / 2;gap > 0;gap = gap / 2) {
//直接插入排序
for(int i = gap;i < arr.length;i++) {
int value = arr[i];
int index = i;
for(j = index;j - gap >= 0 && value < arr[j - gap];j -= gap) {
arr[j] = arr[j - gap];
}
arr[j] = value;
}
}
}
注:冒泡、选择、直接插入排序请转 常见的排序算法——插入排序_小何小何h的博客-CSDN博客