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;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值