Shell Sort(希爾排序)
阿新 • • 發佈:2018-01-02
int 結構 space out pre soft shel 希爾排序 mil
這個排序算法很厲害,我個人很喜歡這個算法,但算法的時間復雜度難計。算法對增量(這裏也稱作step(步長))的選擇也需要註意,只記得個希爾增量的最壞情況為O(n^2)、Hibbard增量的最壞情況為O(n^3/2)(書上有證明),書上說Hibbard增量的希爾排序平均情形運行時間基於模擬的結果被認為是O(n^5/4),但暫時沒人證明出這個結果。
算法的代碼實現有許多種,我就把《數據結構與算法分析》上的代碼用C++敲了幾遍當做學習過了,順便學習C++,記不得的時候再回來復習。
書《數據結構與算法分析》中給出的代碼如下(希爾增量):
#include <iostream> #include <vector> using namespace std; class ShellSort { public: void shellSort(vector<int>& nums) { for(int Increment = (int)nums.size()/2; Increment > 0; Increment /= 2) for(int i = Increment; i < (int)nums.size(); i++) { int j, temp = nums[i]; for(j = i; j >= Increment; j -= Increment) if(temp < nums[j - Increment]) nums[j] = nums[j - Increment]; else break; nums[j] = temp; } } }; int main() { vector<int> nums(5); ShellSort shellsort; for(int i = 0; i < (int)nums.size(); i++) cin >> nums[i]; for(int i = 0; i < (int)nums.size(); i++) cout << nums[i] << ‘ ‘; cout << endl; shellsort.shellSort(nums); for(int i = 0; i < (int)nums.size(); i++) cout << nums[i] << ‘ ‘; return 0; }
Shell Sort(希爾排序)