希爾排序
排序原理
希爾排序又稱縮小增量排序
基本思想:先將原表按增量 ht分組,每個子文件按照直接插入法排序。同樣,用下一個增量ht/2將文件再分爲子文件,再直接插入法排序。直到ht=1時整個文件排好序
關鍵:選擇合適的增量
希爾排序算法可以通過三重循環來實現
package sort;
import java.util.Arrays;
//希爾排序也是一種插入排序,它是簡單插入排序經過改進之後的一個更高效的版本,也稱爲縮小增量排序
public class ShellSort {
public static void main(String[] args) {
int[] arr = new int[] {5,4,2,7,9,-1,8,2};
shellSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void shellSort(int[] arr) {
// 設置增量h,並逐步縮小增量
for (int h = arr.length / 2; h > 0; h /= 2) {
// 從第h個元素,逐個對其所在組進行直接插入排序操作
for (int i = h; i < arr.length; i++) {
for(int j=i;j>h-1;j-=h){
if(arr[j] < arr[j-h]){
swap(arr,j,j-1);
}
}
}
}
}
//交換數組元素
private 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];
}
}