1959年Shell發明,第一個突破O(n^2)的排序算法,是簡單插入排序的改進版,它與插入排序的不同之處在於,他會優先比較距離較遠的元素,希爾排序又叫縮小增量排序。
- 時間複雜度:O(n^1.3)
- 空間複雜度:O(1)
- 穩定性:不穩定
package 排序算法;
import java.util.Arrays;
//O(n^1.3)
public class ShellSort {
public static void main(String[] args) {
int arr[] ={9,1,8,2,7,3,6,4,5};
shellSort(arr);
System.out.println(Arrays.toString(arr));
}
private static void shellSort(int[] arr) {
int j=0;
int e=0;
for(int gap=arr.length/2;gap>0;gap=gap/2){
for (int i=gap;i<arr.length;i++){
j=0;
e=arr[i];
for (j=i;j-gap>=0&&arr[j-gap]>e;j=j-gap){
arr[j]=arr[j-gap];
}
arr[j]=e;
}
}
}
}
執行結果
[1, 2, 3, 4, 5, 6, 7, 8, 9]