#include <iostream>using namespace std;#define  MAXSIZE  20                  typedef struct{    int key;    char *otherinfo;}ElemType;                       typedef struct{    ElemType *r;                                     int  length;                                }SqList;                                        //一趟增量是dk的希尔插入排序void ShellInsert(SqList &L,int dk){    int i,j;    for(i=dk+1;i<=L.length;++i)        if(L.r[i].key<L.r[i-dk].key){                                                    L.r[0]=L.r[i];                                    for(j=i-dk;j>0&& L.r[0].key<L.r[j].key;j-=dk)                L.r[j+dk]=L.r[j];                            L.r[j+dk]=L.r[0];                            }                                }void show(SqList L){    int i;    for(i=1;i<=L.length;i++)        cout<<L.r[i].key<<" ";        cout<<endl; }//t趟希尔排序void ShellSort(SqList &L,int dt[ ],int t){    int k;    for(k=0;k<t;++k){         ShellInsert(L,dt[k]);        show(L);    }                 }                                    void Create_Sq(SqList &L){    int i,n;    cout<<"数据个数:";    cin>>n;                                        cout<<"待排序的数据:";    for(i=1;i<=n;i++){        cin>>L.r[i].key;        L.length++;    }}int main(){    SqList L;    L.r=new ElemType[MAXSIZE+1];    L.length=0;    Create_Sq(L);    int i,t;    int *dt=new int[MAXSIZE];    cout<<"总趟数:";    cin>>t;    for(i=0;i<t;i++){        cout<<"第"<<i+1<<"趟增量:";        cin>>dt[i];    }    cout<<"希尔排序:\n";    ShellSort(L,dt,t);}