二分法查找

#include<stdio.h>
int binary_search(int arr[], int n, int key)
{
	int index = -1; /* 如果在查找过程中,i没有被重新赋值,返回的就是这个初值-1了 */
	int first = 0, last = n - 1, mid;   /* 定义控制查找范围的变量并赋初值 */
	while (first <= last)
	{
		mid = (first + last) / 2;     /* 取中间位置 */
		if (key == arr[mid])     /* 找到了 */
		{
			index = mid;      /* 记录找到的位置 */
			break;          /* 及时退出 */
		}
		else if (key < arr[mid])  /* 该在前半段继续找 */
			last = mid - 1;
		else                /* 接着在后半段找 */
			first = mid + 1;
	}
	return index;
}
#define N 10
int main()
{
	int data[N] = { 1, 3, 9, 12, 32, 41, 45, 62, 75, 77 };
	int key, index = -1;
	printf("Input a key you want to search: ");
	scanf("%d", &key);
	index = binary_search(data, N, key); /* 要在有N个元素的数组data中找key */
	if (index >= 0)
		printf("The index of the key is %d .\n", index);
	else
		printf("Not found.\n");
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值