核心思想:希尔排序是在各种排序的基础上增加了分组的概念,
{n/2,(n/2)/2...1},称为增量序列通过不断将增量序列减小,分的组逐渐变少,从而实现数组有序。
代码实现重点:
- 在外层循环中定义增量序列,从arr.length开始,每次迭代除以2。
- 在组内实现一个排序算法。
代码实现如下所示:
import java.util.Arrays;
public class ShellSort {
private static void shellSort(int[] arr){
for(int gap=arr.length/2;gap>0;gap/=2){
for(int i=gap;i<arr.length;i++){
int j=i;
while(j-gap>=0){
if(arr[j-gap]>arr[j]){
swap(arr,j,j-gap);
j-=gap;
}else{
break;
}
}
}
}
}
private static void swap(int[] arr,int i,int j){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void main(String[] args){
int[] arr=new int[]{9,8,7,6,5,4,3,2,1};
shellSort(arr);
System.out.println(Arrays.toString(arr));
}
}