資料結構 希爾排序!!!

2021-08-14 09:15:40 字數 795 閱讀 2332

希爾排序是將一組資料進行分組,再將分組的資料進行排序,這樣資料就會逐漸的趨向有序,當分組的個數為1的時候將整個陣列排序一遍,那麼整個陣列就排序好了。

基本思想:先將整個待排元素序列分割成若干個子串行(由相隔某個「增量」的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。

如圖:

當進行第一次分組的時候,將第一組資料裡面的元素進行排序,然後進行下一次的排序。
舉個栗子:

希爾排序存在的缺陷:

- 由於希爾排序在分組進行排序的時候進行的搬移資料是隔開的,所以在排序演算法上面是不穩定的。

實現**:

void shellsort(int *arr,size_t size)

arr[k+gap] = tmp;}}}}}

在這裡gap的取值可以根據處理資料的實際情況來自己設定,一般採取的是折半取值發,即在處理gap的時候   gap = gap>>1;

資料結構 希爾排序

1 希爾排序是在直接插入排序的基礎上改良而來的,直接插入排序需要記錄基本有序的情況下才能變得很高效,希爾排序便是採取跳躍分割的策略,將相距 增量 的元素組成乙個子串行,這樣才能保證最後進行直接插入排序時的序列是基本有序的。希爾排序的時間複雜度是 2 希爾排序實現演算法 include include...

資料結構 希爾排序

希爾排序是donald shell於1959年提出來的一種排序演算法,它是第一批突破這個時間複雜度的演算法之一。大話資料結構對這個演算法的講解,我看得一知半解的,之後網上找了下資料,發現維基百科對這個演算法的講解非常不錯,特在此整理一波。希爾排序是基於插入排序的以下兩點性質而提出改進方法的 先上個維...

資料結構 希爾排序

希爾排序。終於在此刻將這個排序學完了。這個排序講什麼的呢?就是說,它對乙個序列,取了乙個gap的步長。然後呢,用gap將這個序列分成了很多組,然後就是每組進行插入排序 插入排序 將乙個序列從前往後走,每走一步,就將這個元素和它前面的所有元素比較交換位置。下面上 def shell sort alis...