public class ShellSort {
public static void main(String[] args) {
int [] arr = {-1, 5, 2, 8, 45, 4, 1, 0, 40, 32};
sort(arr);
}
/*
将原来数组长度除2,得到将原数组分为几组,依次进行,直到数组长度为0为止,
分开的数组将两个逻辑上的数组的第一位与第一位、第二位与第二位为一组, 同理下去, 每组之间进行插入排序
加入数组长度11, 第一次排序分为5组, 第二次排序2组, 第三次就为1组
最后一次排序总会将原数组分为一组, 但这次已经接近于有序的
*/
private static void sort(int [] arr){
// 定义临时交换变量
int temp = 0;
// 将原数组分组
for (int k = arr.length / 2; k > 0; k /= 2) {
// 每小组之间进行插入排序
for (int i = k; i < arr.length; i ++) {
for (int j = i - k; j >= 0; j -= k) {
// 大小值交换
if (arr[j] > arr[j + k]){
temp = arr[j];
arr[j] = arr[j + k];
arr[j + k] = temp;
}
}
}
}
// 遍历排序后
listArray(arr);
}
private static void listArray(int [] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
07-22
778
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)