希爾排序又稱「縮小增量排序」,是直接插入排序演算法的一種更高效的改進版本,但它是非穩定的排序演算法,該方法因d.l.shell於2023年提出而得名。
其基本思路也很簡單,我們設定乙個gap計算每次的縮小增量,每趟排序以gap進行分組,例如假設當前的gap為2的話,那麼他的分組就是array[0],array[2],......為1組,下一組為array[1],array[3],......依此類推,核心演算法就是改進後的直接插入排序,但此時排序間隔不再是1,而是gap為間隔。當gap為1的時候資料已經有一定的順序了,此時相當於作了一次原始的直接插入排序。該演算法之所以高效的原因是因為它採用了分治法的思想。
這裡有一道oj題的引例:
給出乙個資料序列,使用希爾排序演算法進行降序排序。
間隔gap使用序列長度迴圈除2直到1
第一行輸入t,表示有t個測試示例
第二行輸入n,表示第乙個示例有n個資料(n>1)
第三行輸入n個資料,都是正整數,資料之間用空格隔開
以此類推
對每組測試資料,輸出每趟排序結果。不同組測試資料間用空行分隔。
**實現:
#include using namespace std;
void insertsort(int *array, int gap, int size)
else
}array[j + gap] = temp;
}}
int main()
int gap = n / 2;
while (gap != 0) else
}gap = gap / 2;
}cout<}
return 0;
}
內部排序 插入排序 希爾排序
希爾排序將要排序的數值按照某個間隔分成數個數列集合,再對各個數列集合進行插入式排序,重複進行數列分割,每次分割的長度縮小為上一次分割長度的一半,直到分割間隔為0,此時排序完成。直接上code吧 include stdafx.h include include include void shell s...
希爾排序C 實現
shell sort 希爾排序是一種對直接插入排序的改進方法,使用直接插入排序對於乙個基本有序的數列進行排序時,內部迴圈的次數會明顯減少,因此可以減小時間複雜度 希爾排序就是先使數列基本有序,然後再直接插入排序,減小插入排序的時間複雜度 希爾排序首先按一定增量進行插入排序,再逐步縮減增量,當這一增量...
c 實現希爾排序
希爾排序 shell sort 也稱為遞減增量排序演算法,是插入排序的一種高速而穩定的改進版 本。希爾排序是基於插入排序的以下兩點性質而提出改進方法的 1.插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率 2.但插入排序一般來說是低效的,因為插入排序每次只能將資料移動一位。希...