概念java
將相距某個‘增量’的記錄組成一個子序列,分別對其進行直接插入排序,直到‘增量’爲1.shell
Java版實現oop
public static void shell(Integer[] array) { int increment = array.length; do { increment = increment/3+1; for (int i = increment; i < array.length; i++) { Integer temp = array[i]; int j; // loop to do the direct insert sorting // loop at most length/increment times for (j = i-increment; j >= 0 && array[j] > temp; j-=increment) array[j+increment] = array[j]; array[j+increment] = temp; } // end for loop length-increment times } // decrease the increment while (increment > 1); }
取相隔某增量的值做爲一個序列,分別對其進行直接插入排序 blog
時間複雜度分析排序
希爾排序中影響其時間複雜度的關鍵是‘增量’的選取,選取合適的增量,會使得排序的效率提升。rem
大量研究代表,當增量序列爲dlta[k]=2t-k+1-1(0<=k<=t<=log2(n+1))時,能夠得到不錯的效率,其時間複雜度爲O(n3/2)class
希爾排序是個不穩定的排序效率
空間複雜度分析im
所用輔助空間爲O(1)sort