折半查找

折半查找:

在按从小到大顺序的数组中。先查找中间的元素,将中间的元素与要查找的元素作比较。如果要查找的元素比中间元素大,则用右面一半的元素再进行折半查找(递归);如果要查找的元素比中间元素小,则用左面一半的元素再进行折半查找。直至找到元素或者没有元素可找为止。

代码:

#include <stdio.h>
//参数分别为:返回-1(没找到)或者元素下标(找到)bin_find(数组首地址,
//第一个下标,最后一个下标,要查找的元素)

int bin_find(int* pa, int low, int high, int key)
{
	int tmp = (low + high)/2;
	if(low > high )	
		return -1;  	
	else {
		if(key > pa[tmp])	
			return bin_find(pa, tmp+1, high, key);	
		else if(key < pa[tmp])
			return bin_find(pa, low, tmp-1, key);	
		else 
			return tmp;
	}
}

int main()
{
	int a[9] = {13, 20, 23, 28, 30, 34, 50, 60, 99};
		
	int ret = bin_find(a, 0, 8, 34);
	if(ret < 0){
		printf("not found. \n");
		return -1;
	}
	printf("a[%d]: %d\n",ret, a[ret]);

	return 0;
}

结果:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值