希尔(Shell)排序

问题描述:

通过希尔(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之后,整个数组有序)。

猜你喜欢

转载自www.cnblogs.com/heibingtai/p/12579004.html