c 實現希爾排序

2021-07-12 05:58:38 字數 818 閱讀 7351

希爾排序

(shell sort),也稱為遞減增量排序演算法,

是插入排序的一種高速而穩定的改進版

本。希爾排序是基於插入排序的以下兩點性質而提出改進方法的:1.插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率;2.但插入排序一般來說是低效的, 因為插入排序每次只能將資料移動一位。

希爾排序的一般步驟為:

1.先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同乙個組中,在各組內進行直接插人排序。

2.取第二個增量d2平均時間複雜度:o(nlogn)

穩定性:不穩定

//希爾排序是直接插入排序的改進,它的插入增量可以變化,增量為2的shell排序的時間代價可以達到θ(n的3/2次方),有的增量可以達到θ(n的7/6次方),很接近θ(n)。

//將距離某個增量的子串行分割後,分別進行直接插入排序排序。

#include using namespace std;

void shellsort(int array, int n)

} }

while (increment>1);

}void main()

//cout << "排序前的無序陣列元素" << arr[i] << endl;

shellsort(arr, 10);

cout << "排序後的陣列元素" << endl;

for (int i = 0; i < 10; i++)

system("pause");

}

希爾排序C 實現

shell sort 希爾排序是一種對直接插入排序的改進方法,使用直接插入排序對於乙個基本有序的數列進行排序時,內部迴圈的次數會明顯減少,因此可以減小時間複雜度 希爾排序就是先使數列基本有序,然後再直接插入排序,減小插入排序的時間複雜度 希爾排序首先按一定增量進行插入排序,再逐步縮減增量,當這一增量...

希爾排序(c 實現)

希爾 shell 排序的基本思想是 先取乙個小於n的整數d1作為第乙個增量把檔案的全部記錄分成d1個組。所有距離為d1的倍數的記錄放在同乙個組中。先在各組內進行直接插入排序 然後,取得第二個增量d2 一般取d1 n 2,di 1 di 2。如果結果為偶數,則加1,保證di為奇數。希爾排序.cpp 定...

C 實現希爾排序

希爾排序可認為是直接插入排序的公升級版,直接插入排序是一位一位的挪動,而希爾排序是將步長設定為乙個較大的位置,特點如下 1.一次移動,移動位置較大,跳躍式的接近排序後的最終位置 2.最後一次只需要少量移動 3.增量移動必須是遞減的,最後乙個必須是1 3.增量序列應該是互質的 如下 include i...