希尔排序运用了直接插入排序的思想,但不是一步步的移动,而是跳跃式的移动。
直接插入排序链接:https://mp.csdn.net/postedit/91808490
注意:增量序列的最后一个增量值必须为1
1.实现和测试
public class ShellSort {
public static void main(String[] args){
int[] a = {3,4,6,1,2,9,8,0,5,7};
System.out.println(Arrays.toString(shellSort(a)));
}
/**
* 希尔排序
* @param arr
* @return
*/
private static int[] shellSort(int[] arr){
int increment = arr.length; //增量序列
do{
increment = increment/3 +1; //当increment=1时 就是完完整整的直接插入排序
for(int i = increment; i < arr.length; i++){
if(arr[i] < arr[i-increment]){
int temp = arr[i];
int j;
for(j = i-increment; j >= 0&&arr[j] > temp; j-=increment){
arr[j+increment] = arr[j];
}
arr[j+increment] = temp;
}
}
}while(increment > 1);
return arr;
}
}
2.测试结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]