插入排序

Sorting大體共分五類:

1、插入排序

2、交換排序

3、選擇排序

4、歸併排序

5、計數排序


本文介紹插入排序:

一、直接插入排序(Straight Insertion Sort)

需要一個監視哨,一般設在0位置處。

大意:

        先把第i個位置的元素放入監視哨(i從2開始,i<=N),如果第i個比第i-1個數小,

那麼 第i-1個數賦值給第i個,並且從i-2開始,直到r[0](待排序的數字在監視哨內)大於r[j]位置,所有數字後移

L.r[j+1] = L.r[0]


適用範圍:n比較小

空間需要:一個監視哨

時間複雜度:O(n^2)  後面介紹的插入排序時間複雜度都相同


二、折半插入排序(Binary Insertion Sort):

與折半查找類似,折半查找所需要插入的點,後從該點開始,全部後移。

需要設置low與high指針。


三、2-路插入排序

設置first指針與final指針,分別把兩個數放在開始和結尾。final放在前面,first放在後面。

如果比r[0]數大的就把他放在前面重新排列,final指針移動。

如果比r[0]小的就把他加入到後面與first組合起來重新排列。

最後first指向最小的數,final指向最大的數。first到數組盡頭後從r[0]繼續數。

移動次數約爲n^2/8,減少了移動記錄的次數,但扔不可避免地移動記錄。


四、表插入排序

初始化,把r[1]與r[0]設置爲循環鏈表內的元素,其中r[0]爲MAXINT,在列表中始終佔有最大的位置。逐步插入到鏈表中應該插入的位置。

優點:不再需要移動元素。

缺點:查找比較麻煩,不能隨機查找,可以把所有元素重新寫入數組中。


五、希爾排序(Shell's Sort)

注:在時間複雜度上不同於其他插入排序。

希爾排序沒有簡單地分隔子序列,而是採用增量的方式組成子序列。

如:10個元素:

第一趟排序分成五個子序列:1,6   /   2,7   /   3,8  /   4,9 /   5,10

第二趟排序分成三個子序列:1,4 ,7,10   /  2,5,8   /   3,6,9

第三趟完成全部排序。

爲什麼快了,是尚未解決的數學難題。增量的取法不同,時間複雜度也不同,感興趣可以深入研究一下。比較次數和移動次數大約爲n^1.3。

當增量序列爲dlta[k]=2^(t-k+1)  -  1時,其中t爲趟數,時間複雜度O(n^(3/2))


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章