排序算法之希爾排序

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

相關文章
相關標籤/搜索