直接上代码吧
public static void shellSort2(int arr[]) {
if (arr.length == 0) return;
int shell = arr.length / 2;
while (shell != 0) {
for (int i = shell; i < arr.length; i += shell) {
for (int j = i - shell; j >= 0; j -= shell) {
if (arr[j + shell] < arr[j]) {
int temp = arr[j];
arr[j] = arr[j + shell];
arr[j + shell] = temp;
}
}
}
shell/=2;
}
for (int i : arr) {
System.out.println(i);
}
}
解析:根据每次除以2定义一个希尔增量,希尔增量为0的时候推出循环。根据希尔增量逐渐将数组拆分进行插入排序。
首先分成四组
|
|
|
|
|
|
|
|
1 |
3 |
9 |
2 |
6 |
8 |
7 |
4 |
1 |
– |
– |
– |
6 |
– |
– |
– |
– |
3 |
– |
– |
– |
8 |
– |
– |
– |
– |
7 |
– |
– |
– |
9 |
– |
– |
– |
– |
2 |
– |
– |
– |
4 |
然后分为两组顺序变为
|
|
|
|
|
|
|
|
1 |
3 |
7 |
2 |
6 |
8 |
9 |
4 |
1 |
– |
6 |
– |
7 |
– |
9 |
– |
– |
2 |
– |
3 |
– |
4 |
– |
6 |
然后分为一组顺序变为
!注意,每一步根据插入排序进重排。