问题描述:
通过希尔(Shell)排序,从小到大排序一个数组。
算法实现:
public static void shellSort(int[] arr) {
int shellLength = arr.length / 2;
int temp;
while (shellLength > 0) {
System.out.println("current shellLength================" + shellLength);
for(int i = shellLength; i < arr.length; i++) {
for(int j = i - shellLength; j >= 0; j-= shellLength) {
if(arr[j + shellLength] < arr[j]) {
temp = arr[j + shellLength];
arr[j + shellLength] = arr[j];
arr[j] = temp;
}
}
System.out.println("this sort================" + Arrays.toString(arr));
}
shellLength /= 2;
}
}
算法解析:
1.对待排序元素按下标的一定增量分组(当前算法第一次排序是把数组分成Length/2组,即每组两个元素);
2.对每一组中的元素采用“插入排序”算法,使每一组包含的数据有序(此过程为逐渐完成,多个分组内的元素依次逐渐有序);
3.缩小增量的值,对数组进行重新分组(每次分组都是一次缩小组数,扩大每组数据量的过程);
4.重复步骤2,使得最新的数组有序(增量最终为1,完成步骤2之后,整个数组有序)。
原文:https://www.cnblogs.com/heibingtai/p/12579004.html