二分查找法-函数形式

       每进行一次循环,就将所要查找的元素减少一半,在剩下的一半中循环往复,最终找到所要查找的元素。

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

//二分查找

int Find(int arr[], int sz, int k)
{
	int left = 0;
	int right = sz - 1;
	while (left <= right)
	{
		int mid = left + (right-left) / 2;//右边-左边是负数
		if (k > arr[mid])//那么寻找的值就在右边
			left = mid + 1;//右边就要换值了
		else if (k < arr[mid])//那么寻找的值就在左边
			right = mid - 1;//左边就要换值了
		else
			return mid;//返回下标
	}
	if (left > right)
		return -1;//找不到
}


int main()
{
	int arr[] = { 1,2,3,4,5,67,7};//这里不要指定数组大小,下一步计算长度的时候会出问题
	int sz = sizeof(arr) / sizeof(arr[0]);
	int k = 0;
	printf("请输入要查找的数字:\n");
	scanf("%d",&k);

	int m=Find(arr, sz, k);

	if (m == -1)  printf("找不到");
	else          printf("找到了,下标是: %d\n", m);
	return 0;
}


 

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值