1. 希爾排序html
希爾排序(Shell Sort),也稱遞減增量排序算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序算法。【詳情見維基百科】ios
咱們使用插入排序時,但願待排序列具備如下特性:算法
而對於隨機無序序列,插入排序時間複雜度爲O(n2)shell
希爾排序是基於插入排序的如下兩點性質而提出改進方法的:數組
![]()
以23, 10, 4, 1的步長序列進行希爾排序。
|
|
分類 | 排序算法 |
---|---|
數據結構 | 數組 |
最壞時間複雜度 | 根據步長序列的不一樣而不一樣。已知最好的:![]() |
最優時間複雜度 | O(n) |
平均時間複雜度 | 根據步長序列的不一樣而不一樣。 |
最壞空間複雜度 | O(n) |
#include<iostream> #include<vector> using namespace std; void ShellSort(vector<int> &array){ int h = 1; // 遞增序列 1, 4, 13, 40, ... while(h < array.size()/3) h = 3 * h + 1; while(h >= 1){ for(int i = h; i < array.size(); i++){ for(int j = i; j >= h; j -= h){ if(array[j] < array[j-h]) swap(array[j], array[j-h]); } } h = h / 3; } } int main(int argc, char const *argv[]) { vector<int> a1 = {5, 9, 0, 1, 3, 6, 4, 8, 2, 7}; ShellSort(a1); for(auto &it : a1) cout<<it<<' '; cout<<endl; return 0; }
【點擊此處查看經常使用排序算法】數據結構