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

被折叠的 条评论
为什么被折叠?



