演算法導論 演算法分析 希爾排序 003

2021-08-27 03:52:15 字數 649 閱讀 6742

希爾排序是1959 年由d.l.shell 提出來的,相對直接排序有較大的改進。希爾排序又叫縮小增量排序

基本思想:先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行依次直接插入排序。

演算法流程:

1)選擇乙個增量序列t1,t2,…,tk,其中ti>tj,tk=1;

2)按增量序列個數k,對序列進行k 趟排序;

3)每趟排序,根據對應的增量ti,將待排序列分割成若干長度為m 的子串行,分別對各子表進行直接插入排序。僅增量因子為1 時,整個序列作為乙個表來處理,表長度即為整個序列的長度。

時間複雜度:o(n^(1+e))(其中0希爾排序的示例:

c實現原始碼:

void shellsort3(int a, int n)

通過源**我們也能看出來,希爾排序就是在直接插入排序的基礎上加入了分組策略

演算法導論學習補充 希爾排序

希爾排序思想 先將整個待排記錄序列分割成若干子串行分別進行直接插入排序,待整個序列中的記錄 基本有序 時,再對全體記錄進行一次直接插入排序 希爾排序時間複雜度為o n 3 2 public class shellsort arr j d temp 外層排序演算法 param arr 要排序的陣列 p...

希爾排序演算法

希爾排序演算法是對插入排序的一種改進,其核心是減少已排序區域的右移次數來提高速度。具體做法是先獲得乙個間隔數值 h,然後將 n 1 替換成 n h 來完成插入排序。具體例子 元素集合 2,9,5,1,8,3,6,4,7,0 間隔數值 h 4 第一次迴圈 當前元素 array 4 8,那麼 n h 4...

希爾排序演算法

思想簡單描述 在直接插入排序演算法中,每次插入乙個數,使有序序列只增加1個節點,並且對插入下乙個數沒有提供任何幫助。如果比較 相隔較遠距離 稱為增量 的數,使得數移動時能跨過多個元素,則進行一次比較就可能消除多個元素交換。d.l.shell於 1959年在以他名字命名的排序演算法中實現了這一思想。演...