主题:高手帮忙找下错误!
[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&<(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);
}
#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&<(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);
}