排序演算法總結(四)希爾排序

2021-06-18 08:51:24 字數 817 閱讀 7271

希爾排序又稱縮小增量排序,是插入排序的一種。它的基本思想是先將整個待排記錄序列分割成若干個子串行,然後對這若干個子串行分別進行直接插入排序,等到待排序列基本有序時,再對整個序列進行直接插入排序。

比如如下陣列,先已step=5進行分割。

49,38,65,97,76,13,27,49,55,4

由於step=5,則 將49與13排序,38與27排序,65與49排序,97與55排序,76與4排序

第一趟排序後數列變為:

13,27,49,55,4,49,38,65,97,76

然後step=step/2再次進行排序,直到step=1,最後排序一次,陣列有序。

其排序不穩定,演算法時間複雜度存在爭議。

#include using namespace std;

void sort(int *arrays, int begin, int len, int step);

void shellsort(int *arrays, int len);

int main(void)

; int i;

shellsort(arrays,16);

for (i=0;i<16;i++)

tmp=arrays[i];

for (k=i;k>j+step;k-=step)

arrays[j+step]=tmp; }}

void shellsort(int *arrays, int len)

{ int i;

int step;

step=len/2;

while(step>0)

{ for (i=0;i

排序演算法 四 希爾排序

希爾排序是插入排序的一種優化實現,比直接插入排序演算法更高效。也是第一批演算法時間複雜度突破o n 2 的演算法之一。因 d.l.shell 於 1959 年提出而得名。希爾排序是把集合資料按下標的一定增量分組,對每組使用直接插入排序演算法排序 隨著增量的減少,集合資料越來越接近整體有序。當增量減至...

排序演算法(四) 希爾排序 增量排序

希爾排序思想 將現有資料分為d個組,在每個分組內使用直接插入排序演算法,使得整個資料段越來越有序。接著繼續將資料分組並使用直接插入排序 分組會越來越小 直到分組為1。每個分組數一般互質 時間複雜度 o n 1.3 1.5 空間複雜度 o 1 穩定性 不穩定 void shell int arr,in...

整理排序演算法(四) 希爾排序

希爾排序 每次都將元素分成一些小組,在小組內進行排序。小組根據元素數量劃分。小組跨度一般是元素數量的一半。此後每次跨度都除以二。一直到最後,小組跨度變成1。這樣就變成插入排序了。希爾排序的複雜度和增量序列是相關的 這種序列並不是很好的增量序列,使用這個增量序列的時間複雜度 最壞情形 是o n 2 h...