[size=2][b]希尔排序  运行时为什么会冒出个44啊?[/b][/size]

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define EQ(a,b) ((a)==(b))
#define LT(a,b) ((a)< (b))
#define RT(a,b) ((a)> (b))
#define maxsize 100
typedef int elementtype;
typedef struct list
{
    elementtype *base;
    int listlength;
    int size;
}list;

void initlist(list &T)
{
    if(!(T.base=(elementtype *)malloc(maxsize*sizeof(elementtype)))) exit(-1);
    T.size=maxsize;
    T.listlength=0;
}

void listinsert(list &T,elementtype e)//表插入
{
    T.base[T.listlength+1]=e;
    ++T.listlength;
}

void printlist(list &T)//输出表
{
    int i;
    for(i=1;i<=T.listlength;i++)
        printf("%d ",T.base[i]);
    printf("容量为%d\n",T.listlength);
}

void shellinsert(list &T,int dk)
{
    int i,k;
    for(i=dk+1;i<=T.listlength;i++)
    {
        if(LT(T.base[i],T.base[i-dk]))
        {
            T.base[0]=T.base[i];
            for(k=i;k>0&&LT(T.base[0],T.base[k-dk]);k-=dk)
                    T.base[k]=T.base[k-dk];
            T.base[k]=T.base[0];
        }
    }
}

void shellsort(list &T,int dk[],int t)
{
    int k;
    for(k=0;k<t;k++)
        shellinsert(T,dk[k]);
}

void main()
{
    int i;list T;
    initlist(T);
    elementtype a[12]={6,3,8,20,5,9,2,11,18,15,35,46};
    for(i=0;i<12;i++)
        listinsert(T,a[i]);
    int dk[]={5,3,1};//希尔序列
    int t=3;//希尔序列容量
    printf("before sorting...\n");
    printlist(T);
    printf("after sorting...\n");
    shellsort(T,dk,t);
    printlist(T);
}