排序演算法之插入排序(直接插入 希爾排序)

2021-08-30 13:38:55 字數 1222 閱讀 5703

乙個好的排序演算法對於程式的優化會有很大的提公升,雖然在許多語言的類庫中就存在了n種排序方法,但是只有在了解了每一種排序演算法後才能更好的在實際中運用這些演算法。這裡我主要說明插入排序中的直接插入以及希爾排序的實現。

直接插入排序是最簡單的排序演算法之一。對於直接插入排序,它始終維護著乙個有序序列,在每一次插入操作時都將元素插入到這個有序序列對應的位置上。

對於乙個待排序序列:3 1 4 8 6 5,插入排序的步驟如下:

該演算法也比較簡單:

public

void

insertionsort

(t array)

array[j]

= tmp;

}}

可以看出,該演算法從待排序的序列第二位開始始終維護著位置0到位置i為乙個排過序的狀態。並且在進行元素交換過程中,採用移動法的方式,避免了多次的元素交換操作。

時間複雜度:o(n²)

空間複雜度:o(1)

希爾排序是希爾(donald shell)於2023年提出的一種排序演算法。希爾排序也是一種插入排序,它是簡單插入排序經過改進之後的乙個更高效的版本,也稱為縮小增量排序,同時該演算法是衝破o(n²)的第一批演算法之一。

對於乙個待排序序列:3 1 4 8 6 5 2 7,希爾排序的步驟如下:

希爾排序**如下:

public

void

shellsort

(t array)

array[j]

= tmp;}}

}

在希爾排序中,增量的選擇尤為重要,乙個好的增量對於效能的提公升有很大幫助,常用以及希爾建議的增量序列為:gap = (array.length)/2。

在**的第4行,我們從增量大小的陣列下標位置開始向前進行插入排序。

時間複雜度:o(n²)

空間複雜度:o(1)

對於直接插入排序以及希爾排序都是插入排序的一種,但是他們的最壞時間情形都會達到o(n²)。在對於元素的交換過程靈活的使用移動法,可以降低交換操作帶來的時間開銷。

插入排序 直接插入 希爾排序

直接插入排序是將元素按順序插入已經排好序的序列中。對於待插入的元素,如果比最後乙個元素還大,則不用處理。否則,從後邊元素開始比較,並順次後移,直到碰到元素小於或者等於該元素。設定第乙個元素位置為哨兵,用來存放待插入元素。include include include using namespace ...

排序演算法 之插入排序(直接插入排序 希爾排序)

一 排序演算法分為 1.插入排序 直接插入排序 希爾排序 2.交換排序 氣泡排序 快速排序 3.選擇排序 直接選擇排序 堆排序 4.歸併排序 二 下面這張圖對排序演算法的時間複雜度 空間複雜度 穩定性做了乙個總結 二 1 插入排序 直接插入排序 1.演算法 公升序 直接插入排序 void inser...

插入排序(直接插入 希爾)

排序策略 在有序表的恰當處插入乙個新元素,並保持該有序表的有序性 即,當插入第n個元素時,前n 1個元素已經是有序排列 排序過程 以集合中資料為例 初始儲存 第一趟 插入38 第二趟 插入65 第三趟 插入97 第四趟 插入76 第五趟 插入13 第六趟 插入27 第七趟 插入49 一共有八個資料,...