希尔排序的实质是分组插入排序,代码如下
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int test[]={2,5,3,9,7,8,6,1,9,10};
int len=10;
int gap;//步长
for(gap=len/2;gap>0;gap/=2)//gap每次除2缩小至1
{
for(int i=0;i<gap;i++)//分组
{
for(int j=i+gap;j<len;j+=gap)//插入排序 当gap为1时就是普通的插入排序
{
int tmp=test[j];
int k=j-gap;
while(k>=0&&tmp<test[k])
{
test[k+gap]=test[k];
k-=gap;
}
test[k+gap]=tmp;
}
}
}
for(int i=0;i<len;i++)
cout<<test[i]<<endl;
return 0;
}
第一次写 好好学习天天向上!