在插入排序中,若较小的数组在角标较大的位置(从小到排),那么运算的时候就会浪费大量的时间去将之前的n-1个数据往前移。
对此我们可以将数据不断分组,对其中的每个组使用插入排序,当组不断变长的时候,就可以将整个数据覆盖完成
希尔排序中存在两种算法:位移法和交换法 位移法难一些,我写出位移法的实例
int temp
=0;
for(int gap
= arr
.length
/2 ; gap
> 0 ; gap
/= 2) {
for(int i
=gap
; i
<arr
.length
; i
++) {
int curVal
= arr
[i
];
int j
= i
;
while(j
- gap
>=0 &&curVal
< arr
[j
-gap
] ) {
arr
[j
] = arr
[j
-gap
];
j
-=gap
;
}
arr
[j
] = curVal
;
}
}
System
.out
.println(Arrays
.toString(arr
));
}