二分查找法问题

二分查找法问题#include<stdio.h>
#define N 15
int arr[N];
int sort(int a[],int size);
int func(int *a);
int func1(int *a);
int main()
{
int n;
scanf("%d",&n);
func(arr);
sort(arr,N);
if(func1(arr)==0)
printf("no found");
else
printf("该数是数组中的第%d个元素",func1(arr));
}
int func(int *a)
{
int i,j;
for(i=0;i<N-1;i++)
{
scanf("%d",&j);
*(arr+i)=j;
}
}
int sort(int a[],int size)//排序
{
int i,j,t;
for(i=1;i<=N;i++)
{
for(j=0;j<N;j++)
{
if(arr[j]>arr[j+1])
{
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
}
int func1(int *a)//查找n是数字中的第几个数字(二分查找法)
{
int low,high,mid,n;
scanf("%d",&n);
low=0;
high=N;
while(high>=low)
{
mid=(high+low)/2;
if(n<a[mid])
high=mid+1;
else if(n>a[mid])
low=mid-1;
else
return mid;
}
return 0;
}
15个数为1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
用二分查找法当n为1,14 ,15时 运行超时
应该如何更改代码

适用的前提条件:1. 存储在数组中(例如一维数组)
2. 数组元素为有序(例如升序)
查找的基本思想:折半查找,设查找的元素为value
value与中间元素(middle = left + (right -left) / 2这样做的好处防止中间元素出现越界)比较,若比中间值小则查找范围在middle + 1继续查找,若比中间值大则查找范围在middle -1,若与中间值相等则查找结束索引元素为value = middle。
温馨提示:答案为网友推荐,仅供参考
相似回答