折半插入排序
#include<iostream>
using namespace std;
#define MIXSIZE 20
typedef int KeyType;
typedef int infoType;
typedef struct{
KeyType key;
infoType other;
}RedType;
typedef struct{
RedType r[MIXSIZE+1];
int length;
}SqList;
void ShellInsort(SqList &L,int dk)
{
int j;
for(int i=dk+1;i<=L.length;i++)
{
if(L.r[i].key<L.r[i-dk].key)
{
L.r[0].key=L.r[i].key;
for(j=i-dk;j>0&&L.r[0].key<L.r[j].key;j=j-dk)//当j<0或者L.r[0].key>=L.r[0].key;
{
L.r[j+dk]=L.r[j];
}
L.r[j+dk]=L.r[0];
}
}
}
void ShellSort(SqList &L,int dt[],int t)//增量选取函数
{
for(int k=0;k<t;k++)
{
ShellInsort(L,dt[k]);
}
}
int main()
{
SqList L;
L.length=10;
int arr[]={5,3,1};
int t=3;
cout<<"输入数据";
for(int i=1;i<=L.length;i++)
{
cin>>L.r[i].key;
}
cout<<"输出排序之前的数";
for(int i=1;i<=L.length;i++)
{
cout<<L.r[i].key<<" ";
}
cout<<endl;
ShellSort(L,arr,t);
cout<<"输出排序之后的数";
for(int i=1;i<=L.length;i++)
{
cout<<L.r[i].key<<" ";
}
}