排序算法之希尔排序

概念

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

posted @ 2013-12-26 01:10  sxplus  阅读(272)  评论(0编辑  收藏  举报