思路:
希尔排序与插入排序类似,其就是在插入排序的基础上添加了间隔,让小的数尽量放在前面,大的数尽量全放在后面。
代码(本代码用了移位法对希尔排序进行了优化):
具体分组的间隔(grep)是数组的一半,但是每次间隔的数都要减少。
public class test02 {
public static void main(String[] args) {
int[] arr = {123,1,34,1234,324,32};
shellSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void shellSort(int[] arr){
//每次的间隔数为grep,每次间隔数都逐渐缩短
for(int grep = arr.length/2;grep>0;grep/=2){
//从第grep个元素开始排序
//以下为插入排序
for(int i = grep;i< arr.length;i++){
//将i先保存起来
int j = i;
int temp = arr[j];
while (j - grep >=0 && temp<arr[j-grep]){
arr[j] = arr[j-grep];
j = j-grep;
}
arr[j] = temp;
}
}
}
}