排序算法之希尔排序
概念
将相距某个‘增量’的记录组成一个子序列,分别对其进行直接插入排序,直到‘增量’为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)

浙公网安备 33010602011771号