二分查找的递归和非递归算法

本文详细介绍了二分查找算法的原理,包括递归和非递归两种实现方式,并通过实例代码进行讲解。二分查找是一种在有序数组中查找特定元素的搜索算法,其效率显著高于线性查找。递归实现利用了函数的自我调用来简化逻辑,而非递归实现则借助循环结构。理解这两种方法对于提升算法设计能力至关重要。
#include<stdio.h>

//   元素从下标 1 开始储存 

//   非递归实现 
//int BS(int *a, int m, int left, int right){
//	int mid ;
//	while(left<=right){
//		mid = (left+right)/2;
//		if(a[mid]>m)	right = mid-1;
//		else if(a[mid]<m)	left = mid+1;
//		else	return mid;
//	}
//	return 0;
//}

//    递归实现 
int BS(int *a, int m, int left, int right){
	if(left>right)	return 0;
	int mid = (left+right)/2;
	if(m<a[mid])	return BS(a, m, left, mid-1);
	else if(m>a[mid])	return BS(a, m, mid+1, right);
	else	return mid;

}

int main(void){
	int n,i,m;
	scanf("%d %d",&n,&m);
	int a[n+1];
	for(i=1;i<n+1;i++)
		scanf("%d",&a[i]);
	int index = BS(a,m,1,n);
	if(index == 0)
		printf("Not Found!\n");
	else
		printf("%d",index);
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值