C语言用函数实现,二分法查找有序数组中的数,若没有返回1

题目:二分法查找有序数组中的数,没有返回-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;
}

猜你喜欢

转载自blog.csdn.net/weixin_41635275/article/details/89062120