[c]代码库
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<t; t++ )
ShellSort ( p,dlta[k] ); /*一趟增量为dlta[k]的插入排序*/
}