希尔排序
1 、代码如下:
#include<iostream>
using namespace std;
void ShellInsert(int a[],int dk,int length);
void ShellSort(int a[],int dt[],int t,int length);
void print(int a[],int length);
int main()
{
//int a[10]={49,38,65,97,76,13,27,49,55,04};
int a[16]={49,38,65,97,76,13,27,49,55,04,88,33,22,2,3,2};
int dt[4]={7,5,3,1};
print(a,16);
ShellSort(a,dt,4,16);
cout<<"the result :"<<endl;
print(a,16);
return 0;
}
void print(int a[],int length){
for(int i=0;i<length;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
/**
* length:数组的长度
* dk :增量
**/
void ShellInsert(int a[],int dk,int length)
{
for(int i=dk;i<length;i++)
{ //发现该元素小于前一个增量位置的元素
if(a[i]<a[i-dk])
{
int tmp=a[i];
int j;
for(j=i-dk;j>=0&&tmp<a[j];j-=dk)
{
a[j+dk]=a[j];
}
a[j+dk]=tmp;
}
}
}
/*
* dt[i]:建议为dt[i]=2^(t-i+1)-1即(t为趟数)
*/
void ShellSort(int a[],int dt[],int t,int length){
for(int i=0;i<t;i++)
{
ShellInsert(a,dt[i],length);
cout<<"the "<<i+1 <<" trip..."<<endl;
print(a,length);
}
}
2、编译结果: