C语言,用二分法查找数组中的数,运行出错
//每次我输入除了数组中的数字时总是不能输出-1值,而是光标停在那里,不输出任何东西,麻烦帮我看看哪里出错修改和解释下,谢谢。#include<stdio.h>intse...
//每次我输入除了数组中的数字时总是不能输出-1值,而是光标停在那里,不输出任何东西,麻烦帮我看看哪里出错修改和解释下,谢谢。
#include<stdio.h>
int search(int *a,int n)
{
int head=0,tail=9,mid=(head+tail)/2;
while(1)
{
if(head==tail)
return -1;
if(*(a+mid)==n)
return mid;
else if(*(a+mid)>n)
tail=mid;
else
head=mid;
mid=(head+tail)/2;
}
}
main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int i;
scanf("%d",&i);
printf("\n所在下标为:%d",search(arr,i));
} 展开
#include<stdio.h>
int search(int *a,int n)
{
int head=0,tail=9,mid=(head+tail)/2;
while(1)
{
if(head==tail)
return -1;
if(*(a+mid)==n)
return mid;
else if(*(a+mid)>n)
tail=mid;
else
head=mid;
mid=(head+tail)/2;
}
}
main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int i;
scanf("%d",&i);
printf("\n所在下标为:%d",search(arr,i));
} 展开
2个回答
展开全部
已经修改好了:
#include<stdio.h>
int search(int *a,int n)
{
int head=0,tail=9,mid=(head+tail)/2;
while(1)
{
if(head>tail)
return -1;
if(*(a+mid)==n)
return mid;
else if(*(a+mid)>n)
tail=mid-1;
else
head=mid+1;
mid=(head+tail)/2;
}
}
main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int i;
scanf("%d",&i);
printf("\n所在下标为:%d",search(arr,i));
}
#include<stdio.h>
int search(int *a,int n)
{
int head=0,tail=9,mid=(head+tail)/2;
while(1)
{
if(head>tail)
return -1;
if(*(a+mid)==n)
return mid;
else if(*(a+mid)>n)
tail=mid-1;
else
head=mid+1;
mid=(head+tail)/2;
}
}
main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int i;
scanf("%d",&i);
printf("\n所在下标为:%d",search(arr,i));
}
更多追问追答
追问
我之前的程序也可以查询在数组中已有的元素,请问下我之前的问题出在哪?
追答
当head和tail相差1时,就陷入了死循环。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
int search(int *a,int n)
{
int head=0,tail=9,mid=(head+tail)/2;
while(1)
{
if(head>=tail)
return -1;
if(*(a+mid)==n)
return mid;
else if(*(a+mid)>n)
tail=mid-1;
else
head=mid+1;
mid=(head+tail)/2;
}
}
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int i;
scanf("%d",&i);
printf("\n所在下标为:%d",search(arr,i));
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询