希尔排序主要是每次减少两个数之间的增量,让两个数再来进行比较。d=d/2,故包含两个函数,一个函数是将d每次减少,直到d==1,另一个函数是将增量旁边的两个数进行比较,
#include<iostream>
#include<stdlib.h>
using namespace std;
void shellInsert(int a[],int d,int n)
{
for(int i=d;i<n;i++)//从第一个d的位置开始
{
int j=i-d;//j先指向i前面的位置
int temp=a[i];//将a[i]的值赋值给temp
while(j>=0 && a[j]>temp)//将a[j]从后向前找,直到找到比其小的数的位置
{
a[j+d]=a[j];//向后挪动
j=j-d;
}
if(j!=(i-d))//存在比其小的数
{
a[j+d]=temp;//将temp的数插入到a[j+d]中
}
}
}
void shellSort(int a[],int n)
{
int d=n/2;//第一次是现将n/2赋值给d
while(d>=1)//当d>=1或者d>0时,表示相邻两个元素距离
{
shellInsert(a,d,n);//插入排序
d=d/2;//每次将增量减半
}
}
int main(void)
{
int a[30];
cout<<"Please input the number of the figure:"<<endl;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
shellSort(a,n);
for(int j=0;j<n;j++)
{
cout<<a[j]<<' ';
}
cout<<endl;
return 0;
}