趁天使不在,沙发~~
哦,还有一个问题啊~~~真多
来,看看你的原代码,同样,我也改动了格式
#include<stdio.h>
int binsearch(int x,int v[],int n);
int main()
{
int a,k,i,c,b[10];
c=10;
printf("查找的数:");
scanf("%d",a);
printf("从小到大输入:");
for(i=0;i<=9;i++)
scanf("%d",&b[i]);
binsearch(a,b[],c); /*这里,b[]参数不能这么写*/
return k;
/*这么快就return啦?!那你下一句还要来干吗?而且k是什么?*/
printf("这是第%d个数\n",k);
}
/*binsearch:find x in v[0]<=v[1]<=...<=v[n-1]*/
int binsearch(int x,int v[],int n)
{
int low,high,mid;
low=0;
high=n-1;
mid=(low+high)/2;
while (low<=high&&x!=v[mid])
{
if(x<v[mid])
high=mid-1;
else
low=mid+1;
mid=(low+high)/2;
}
if(x==v[mid])
return mid;/*found match*//*我们习惯从1开始数数,不是0*/
else return -1;/*no match*/
}
这个代码明显比上一个要好多了。进步比我要快很多啊,我至今仍然还是个小菜鸟T_T
下面是修改过的代码
#include<stdio.h>
int binsearch(int x,int v[],int n);
int main()
{
int a,k,i,c=10,b[10];
printf("查找的数:");
scanf("%d",&a);
printf("从小到大输入10个整数:");
for(i=0;i<=9;i++)
scanf("%d",&b[i]);
k=binsearch(a,b,c); /*参数b[]改为b,并且给k赋值*/
printf("这是第 %d 个数\n",k);
getch();
return k /*return 放这里才合理*/
}
/*binsearch:find x in v[0]<=v[1]<=...<=v[n-1]*/
int binsearch(int x,int v[],int n)
{
int low=0,high=n-1,mid=(low+high)/2;
while (low<=high&&x!=v[mid])
{
if (x<v[mid])
high=mid-1;
else
low=mid+1;
mid=(low+high)/2;
}
if(x==v[mid])
return mid+1;/*found match*/
/*我们数数,从"1"开始*/
else
return -1;/*no match*/
}