1、算法思想:
第一步:将待排序序列分割成若干个子序列
第二步:对若干个子序列分别进行直接插入排序,待整个序列中的记录基本有序时
第三步:再对全体记录进行依次插入排序
2、动图演示(动图来源菜鸟教程)
代码实现:
public class shellSort {
public static void main(String[] args) {
int[] arr = {22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70};
int[] ans = shellSort(arr);
for(int i : ans) {
System.out.print(i + " ");
}
}
private static int[] shellSort(int[] arr) {
int length = arr.length;
int temp;
for (int step = length / 2; step >= 1; step /= 2) {
for (int i = step; i < length; i++) {
temp = arr[i];
int j = i - step;
while (j >= 0 && arr[j] > temp) {
arr[j + step] = arr[j];
j -= step;
}
arr[j + step] = temp;
}
}
return arr;
}
}
运行结果:3 5 9 22 32 34 35 37 50 55 64 70 82 89