排序算法之希尔排序
概念
将相距某个‘增量’的记录组成一个子序列,分别对其进行直接插入排序,直到‘增量’为1.
Java版实现
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); }
取相隔某增量的值作为一个序列,分别对其进行直接插入排序
时间复杂度分析
希尔排序中影响其时间复杂度的关键是‘增量’的选取,选取合适的增量,会使得排序的效率提高。
大量研究表明,当增量序列为dlta[k]=2t-k+1-1(0<=k<=t<=log2(n+1))时,可以获得不错的效率,其时间复杂度为O(n3/2)
希尔排序是个不稳定的排序
空间复杂度分析
所用辅助空间为O(1)