排序-希爾

原理:不停拆分,對各個小子序列進行直接插入排序再更換步長繼續排序,等基本有序後再進行一次直接插入排序。

public static int[] ShellSort(int[]a){
		int k;
		for(int i=a.length/2;i>0;i/=2){
			//i爲步長
			for(int j=i;j<a.length;j++){
				//j爲後半段
				int tmp = a[j];
				for( k=j-i;k>=0;k-=i){
					//k爲前半段
					if(tmp<a[k]){
						a[k+i] = a[k];
					}
					else{
						break;
					}
				}
			a[k+i] = tmp;	
			}
			
		}
		return a;
	}

看着是三重循環,第一重用來設置步長進行每次排序,j爲後半段每次進1與前面的每段進行比較,也就是一個跨度爲i的直接插入排序

不穩定,最好、平均時間複雜度爲這裏寫圖片描述最壞爲這裏寫圖片描述

發佈了29 篇原創文章 · 獲贊 0 · 訪問量 5423
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章