希尔排序又叫缩减增量排序,它的排序原理有点像插入排序。插入排序时,两个数的间隔为1,但是希尔排序时,间隔是有大缩小的,直至间隔
为1.
希尔排序的排序间隔有大缩小,初始间隔一般设为排序总数据长度的一般。
希尔排序最坏时间复杂度为O(N^2),但是平均运行时间为O(N^5/4).
- #include<iostream>
- #include<vector>
- using namespace std;
- void print(vector<int>& v)
- {
- for(int i=0;i<v.size();i++)
- cout<<v[i]<<" ";
- cout<<endl;
- }
- void shellSort(vector<int> &v)
- {
- for(int gap=v.size()/2;gap>0;gap=gap/2)
- {
- for(int i=gap;i<v.size();i++)
- {
- int tmp=v[i];
- int j;
- for(j=i;j>=gap&&tmp<v[j-gap];j=j-gap)
- v[j] =v[j-gap];
- v[j]=tmp;
- }
- cout<<"增量="<<gap<<"排序后:";
- print(v);
- }
-
- }
-
- int main()
- {
- vector<int> a;
-
- for(int i=0;i<10;i++)
- a.push_back(rand()%100);
- std::cout<<"未排序数据:";
- print(a);
- shellSort(a);
- return 0;
- }