希尔排序又叫缩减增量排序,它的排序原理有点像插入排序。插入排序时,两个数的间隔为1,但是希尔排序时,间隔是有大缩小的,直至间隔
为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);//随机数放入vector
std::cout<<"未排序数据:";
print(a);
shellSort(a);
return 0;
}