最近在看希尔排序。
希尔排序,也称递减增量排序算法,是插入排序的更高效的改进版本。
public class DonaldShell{
public static void main(String[] args) {
int []arr ={9,4,2,7,5,8,3,1,0};
sort(arr);
System.out.println(Arrays.toString(arr));
}
/**
* 希尔排序 针对有序序列在插入时采用交换法
* @param arr
*/
public static void sort(int []arr){
//增量gap,并逐步缩小增量
for(int gap=arr.length/2;gap>0;gap/=2){
//从第gap个元素,逐个对其所在组进行直接插入排序操作
for(int i=gap;i<arr.length;i++){
int j = i;
while(j-gap>=0 && arr[j]< arr[j-gap]){
//插入排序采用交换法
swap(arr,j,j-gap);
//减去一次间隔
j-=gap;
}
}
}
}
//交换个元素
public static void swap(int []arr,int a,int b){
arr[a] = arr[a]+arr[b];
arr[b] = arr[a]-arr[b];
arr[a] = arr[a]-arr[b];
}
}
希尔排序是基于插入排序的两个性质而提出的改进方法: