希爾排序(Shell Sort)又稱縮小增量排序算法的基本思路是:先取一個小於n的整數(稱爲增量)而後把排序中的n個記錄分爲若干個子表從下標0開始間隔爲i的記錄組成一個子表在各個子表內進行直接插入排序隨着增量的減少達到排序目的。java
算法性能分析:算法
(1) 空間複雜度 希爾排序用到了直接插入排序因此空間複雜度爲O(1)shell
(2) 時間複雜度 O(n ^2數組
(3)算法的穩定性 不穩定的排序算法性能
/* * Kiss_My_Love * 2012/8/22 * 希爾排序 **/ public static void shellArray(Object[] a){ for(int i=a.length/2;i>0;i/=2){ //對排序數列設置增量,並肯定外圍循環次數 for(int j=0;j<i;j++){ insertSort(a,j,i);//單位數組進行排序 } } } private static void insertSort(Object[] A, int start, int d) { int t; for (int i = start + d; i < A.length; i += d) { for (int j = i; (j >= d) && ((Integer)A[j] <(Integer) A[j - d]); j -= d) { t = (Integer) A[j]; A[j] = A[j - d]; A[j - d] = t; } }
聽所還有一個更加犀利的算法比較NB如今和你們一塊兒分享 這個是別人寫的給你們拿出來好好看看:spa
/* * Kiss_My_Love * 2012/8/23 * 希爾排序 **/ public static Object[] shellSort(Object[] arr){ int i,j,n=1,temp,len = arr.length; while(n<=len/3) n = n*3+1; while(n > 0){ for (i = n; i < len; i++) { temp = (Integer) arr[i]; j = i; while(j >= n && (Integer)arr[j - n] >= temp){ arr[j] = arr[j - n]; j-=n; } arr[j] = temp; } n = (n - 1)/3; } return arr; }