1、基本思想:先取一个小于n(数组的长度)的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中,先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量 等于1,即所有记录放在同一组中进行直接插入排序。
2、算法描述:
a.首先要选取gap的值;
b.选取了gap之后,就将数列分成了gap个组,对于每一个组都执行直接插入排序;
c.在排序完所有的组之后,将gap的值减半;继续对数列进行分组,然后进行排序;
d.重复这样的操作,直到gap<0为止;
3、动图:
4、代码:
public static void main(String[] args){
int[] array={84,83,88,87,61,50,70,60,80,99};
int gap = array.length;
while (true) {
gap /= 2; //增量每次减半
for (int i = 0; i < gap; i++) {
for (int j = i + gap; j < array.length; j += gap) {//循环(插入排序)
int temp = array[j];
int k = j - gap;
while (k >= 0 && array[k] > temp) {
array[k + gap] = array[k];
k -= gap;
}
array[k + gap] = temp;
}
}
if (gap == 1)
break;
}
System.out.println(“排序:”);
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}
希尔排序
最新推荐文章于 2023-11-28 16:53:17 发布