importcn.idestiny.util.generatedarray;
/*** @auther: fan
* @date: 2018/8/25 22:25
* @description:希爾排序
* * 重點:設定增量
* 舉例來說,含有1000個資料項的陣列可能先以364為增量,然後以121為增量,以40為增量,
* 以13為增量,以4為增量,最後以 1為增量進行希爾排序。用來形成間隔的數列被稱為間隔序列。
* 這裡所表示的間隔序列由knuth提出,此序列是很常用的。
* 數列以逆向形式從1開始,通過遞迴表示式 h=3*b+1 來產生,初始值為1。
* * 當增量為arr.length/2的時候
* 1) 8,5,7,1,3,6,9.4 [8,3],[5,6] [7,9],[1,4]
* 2) 3,5,7,1,8,6,9,4 [3,7,8,9] [5,1,6,4]
* 3) 3,1,7,4,8,5,9,6 [3,1,7,4,8,5,9,6]
* 4) 1,3,4,5,6,7,8,9
**/public
class
shellsort
public
static
void shellsort(int
arr)
//根據增量分組,增量為1時,只需要插入排序演算法微調即可
while(h>=1)
//插入值最終應該放置的位置
arr[j+h] =key;
}//縮小增量
h /= 3;}}
}
排序演算法 希爾排序
如果乙個排序演算法,每次只把諸專案移動乙個位置,則它的平均執行時間至少要和n2成比例.因為在這個排序演算法執行的過程當中,每個記錄平均都必須遍歷n 3個位置,因此如果要對直接插入排序進行有效的,實質性的改進的話,就要有一種演算法,它可以使記錄做長距離的跳躍,而不是一步一步的挪動.希爾排序也是一種插入...
排序演算法 希爾排序
摘要 排序演算法有很多,最簡單的有氣泡排序和插入排序,這兩種方法都具有o n 2 的時間界.我們想要討論的是具有更好的時間界的排序演算法,比如希爾排序.1 希爾排序的思路是通過比較一定間距的元素來進行排序,最後再對所有相鄰元素進行一次插入排序.2 希爾排序最重要的引數是增量序列 h1,h2,ht 只...
排序演算法 希爾排序
希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。希爾排序通過將比較的全部元素分為幾個區域來提公升插入排序的效能。這樣可以讓乙個元素可以一次性地朝最終位置前進一大步。然後演算法再取越來越小的步長進行排序,演算法的最後一步就是普通的插入排序,但是到了這步,...