希尔排序是插入排序的优化,因为插入排序适合用于大部分数据已经排序好了的序列,不是稳定排序,任何情况下的时间复杂度为o(n^1.5),只需一个额外辅助空间o(1)。排序的原则是将数据划分成特定间隔的几个子集,以插入排序法排完子集内的数据后再渐渐减少间隔距离。
#include<iostream>
#include<stdlib.h>
using namespace std;
void xier(int num[],int len)
{
for(int m=len/2;m>0;m--)//间隔距离逐渐减少
{
for(int i=0;i<len;i++)//依次插入待排序中的值
{
int j;
int key=num[i];//将待排数值设为定值,以免后面移动时出错
for(j=i-m;j>=0&&key<num[j];j=j-m)//以m为间隔,比较属于同一组的数据
num[j+m]=num[j];
num[j+m]=key;
}
}
}
int main()
{
int len=5;
int num[5];
for(int i=0;i<5;i++)
cin>>num[i];
xier(num,len);
for(int i=0;i<5;i++)
cout<<num[i];
system("pause");
return 0;
}