利用二分查找算法在一个有序表中插入一个元素x,并保持表的有序性。请问我的程序运行出来怎么是错的?

#include<stdio.h>
void bininsert(int A[],int x,int n)
{
int l=0,h=n-1,mid,i;
int inplace;
int find=0;
while(l<=h&&find==0)
{
mid=(l+h)/2;
if(x<A[mid])
h=mid-1;
else if(x>A[mid])
l=mid+1;
else
find=1;
}
if(find)
inplace=mid;
else
inplace=l;
for(i=n-1;i>=inplace;i--)
A[i+1]=A[i];
A[inplace]=x;
}
main()
{
int a[20],i,x,n;
for(i=0;i<10;i++)
a[i]=i;
printf("请输入要插入的值:");

scanf("%d",&x);
bininsert(a,n,x);
if(a[x]<=n)
{
for(i=10;i>=x;i--)
a[i+1]=a[i];
a[x]=n;
}

for(i=1;i<=11;i++);
printf("%d",a[i]);
}

此程序人有一个问题 需测试才能发现
int i,x=2;
int a[11]={1,3,5,6,8,11,15,20,26,41};
此时便会出现错误
任待完善。。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-14
在主函数中调用bininsert(a,n,x),你这里的N和X等于多少呢?你自己都没赋值啊。还有,main()前加个void吧,看着舒服点。追问

我改不好,麻烦直接帮我改正确来。谢谢

追答

#include

void bininsert(int A[],int x,int n)
{
int l=0,h=n-1,mid,i;
int inplace;
int find=0;

if(x>A[n-1]) /*x直接插在数组的最后一个元素之后*/
A[n]=x;
else if(xA[mid])
l=mid+1;
else /*x刚好与数组中的元素A[mid]相等*/
find=1;
}
inplace=mid;
}

for(i=n-1;i>=inplace;i--)
A[i+1]=A[i];
A[inplace]=x;
}

void main()
{
int i,x=13;
int a[11]={1,2,5,6,8,11,15,20,26,41};/*实验使用的数据,11个位置存放10个数据*/

for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");

bininsert(a,x,10);

for(i=0;i<11;i++)/*注意你原来的程序,此处多了个分号,造成无限循环!*/
printf("%d ",a[i]);
}

追问

好厉害,我还有一个程序,可以帮我完善一下吗,,

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网