算法思想:(增量选择有多种方法,当前选用的是Shell本人提出的一种方法)
- 选取初始增量 increment = 序列长度/2 (java自动向下取整)
- 根据当前增量进行划分
- 对划分好的每组进行插入排序
- 增量 increment = increment/2
- 重复步奏2,3 ,4直到增量 increment = 0
实现代码和测试结果
import java.util.Arrays;
/**
* className:Sort
*
* @author:zjl
* @version:0.1
* @date:2020/8/619:31
* @since:jdk1.8
*/
public class Sort {
public static void main(String[] args) {
int R[] = {1,2,5,9,3,7,8,4,6};
int[] ints = shellSort(R);
for (int i = 0; i < ints.length; i++) {
System.out.print(ints[i]+" ");
}
}
public static int[] shellSort(int R[]) {
int increment = R.length;
while (increment > 0) {
increment = increment / 2; //计算增量
//插入排序
for (int i = increment; i < R.length; i++) {
int temp = R[i];
int j = i - increment;//每组已拍好序列的最后个元素
while (j >= 0 && R[j] > temp) {//寻找插入位置
R[j + increment] = R[j];//比待排元素大,将其后移
j-=increment;
}
R[j + increment] = temp;//插入
}
}
return R;
}
}
测试结果