快递收件人信息出售:C语言编程

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/14 16:11:47
用希尔排序
以下程序错在哪里
void shell(int r[],int n)
{int i,j,d,temp;
clrscr();
d=n/2;
while(d>0)
{
for(i=d;i<=n;i++)
j=i-d;
while(j>0)
{
if(r[j]>r[j+d])
{
temp=r[j];
r[j]=r[j+d];
r[j+d]=temp;
j=j-d;
}
else j=-1;
}
d=d/2;
}
}
main()
{int r[5]={2,6,5,78,4};
int d,i;
shell(r,5);
for(i=0;i<5;i++)
printf("%3d",r[i]);
}

希尔排序代码

这个比较短小

*p=数组指针; n=数组元素个数
void Hill_arrangement(int *p,int n)
{int i,gap,j,temp;
gap=n/2;
while(gap>=1)
{for(i=gap;i<n;i++)
{temp=*(p+i);
j=i;
while(j>=gap&&*(p+j-gap)>temp)
{*(p+j)=*(p+j-gap);
j=j-gap;
*(p+j)=temp;
}
}
gap=gap/2;
}
}

达眼一看就知道你的不对么
希儿排序要有两个函数调用的啊,
没趟下来要调用一个函数,再是总的调用,
然后main调用最后的那个函数啊

#include<stdio.h>
#include<math.h>
#include<conio.h>
void Print(int a[],int n)
{
int i;
for(i=1;i<=n;i++)
printf(" a[%d]=%d",i,a[i]);
} /*一个打印函数*/

void ShellInsert(int a[],int dk,int n)
{
int i,j;
for(i=dk+1;i<=n;i++)
if(a[i]<a[i-dk])
{
a[0]=a[i];
for(j=i-dk;j>0&&a[0]<a[j];j-=dk)
a[j+dk]=a[j];
a[j+dk]=a[0];
}
}

void ShellSort(int a[],int t,int n)
{
int k,dk;
for(k=2;k<=t;k++)
{
dk=pow(2,t-k)+1;
ShellInsert(a,dk,n);
printf("\nThe %d time:\n",k-1);
Print(a,n);
}
ShellInsert(a,1,n);
}

int main()
{
int n,i,t;
int a[100];
printf("\nInput the time:\n");
scanf("%d",&t);
printf("\nInput the Length:\n");
scanf("%d",&n);
if(t<=(int)(log10(n-1)/log10(2)))
{
printf("Input the number:\n");
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
printf("Before:\n");
Print(a,n);
ShellSort(a,t,n);
printf("\nThe last time:\n");
Print(a,n);
}
else
printf("\nERROR:time.Try again!");
getch();
printf("Press any key to continue...");

}

给点分嘉奖一下啊