void ShellInsert ( S_TBL &p,int dk ) { /*一趟增量为dk 的插入排序,dk 为步长因子*/ for ( i=dk+1; i<=p->length; i++ ) if ( p->elem[i].key < p->elem[i-dk].key ) /*小于时,需elem[i]将插入有序表*/ { p->elem[0]=p->elem[i]; /*为统一算法设置监测*/ for ( j=i-dk; j>0&&p->elem[0].key < p->elem[j].key; j=j-dk ) p->elem[j+dk]=p->elem[j]; /*记录后移*/ p->elem[j+dk]=p->elem[0]; /*插入到正确位置*/ } } void ShellSort ( S_TBL *p,int dlta[],int t ) { /*按增量序列dlta[0,1…,t-1]对顺序表*p 作希尔排序*/ for ( k=0; k