题目:二分法查找有序数组中的数,没有返回-1
一、解题思路:
1.找出数组中间那个元素的下标(mid=begin/end),通过数组下标找出数组的中间值并与目标值比较,判断如果目标值与数值中间的下标对应的元素值相等,则返回b。
2.如大于目标值,把中间的下标减去1并作为最后一个下标(end),begin不变,然后mid=(begin+end)/2计算下一个中间值。
3.如小于目标值,把中间的下标加上1并作为第一个下标(begin),end不变,然后mid=(begin+end)/2计算下一个中间值。
4.若无法找到返回-1,用-1的原因是因为数组中的元素下标都大于0.
#include<stdio.h>
int Binaryserach (int arr[],int len,int a);
int main()
{
int a=6;
int arr[]={1,2,3,4,5,6,7};
Binaryserach(arr,sizeof (arr)/sizeof (arr[0]),a);
printf("%d",Binaryserach(arr,sizeof (arr)/sizeof (arr[0]),a));
return 0;
}
int Binaryserach (int arr[],int len,int a)
{
int b=a; int begin=0; int end=len; int mid=len/2; int i=0;
for(i=0;i<len;i++)//由于目标值可能位于数组最后,所以为了功能需要,需要循环遍历一次数组。
if(a==arr[mid])//注意==是比较而 一个=是赋值
{
return b;
}
else if (b<arr[mid])
{
end=mid-1;
mid=(begin+end)/2;
}
else
{
begin=mid+1;
mid=(begin+end)/2;
}
}
return -1;
}