排序算法之希尔排序

概念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

相关文章
相关标签/搜索