题目描述
在有序序列中查找某一元素x。
输入
首先输入一个正整数n(n<=100000),表示该序列有n个整数,然后按从小到大的顺序输入n个整数;
接着是一个正整数m,表示有m次查找;
最后是m个整数,表示m个要查找的整数x。
输出
对于每一次查找,有一行输出。若序列中存在要查找的元素x,则输出元素x在序列中的序号(序号从0开始);若序列中不存在要查找的元素x,则输出"Not found!"。
样例输入 Copy
5 1 3 5 7 9 11 -1 1 2 3 4 5 6 7 8 9 10
样例输出 Copy
Not found! 0 Not found! 1 Not found! 2 Not found! 3 Not found! 4 Not found!#include <stdio.h> #define N 100000 int BSearch(int a[],int x,int low,int high);//二分搜索函数 int main() { int i,n,m,result; int a[N],R[N]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); scanf("%d",&m); for(i=0;i<m;i++) //把想要查找的数据存入数组R scanf("%d",&R[i]); for(i=0;i<m;i++) { result=BSearch(a,R[i],0,n-1);//调用二分查找函数查找 if(result!=-1) printf("%d\n",result); else printf("Not found!\n"); } return 0; } int BSearch(int a[],int x,int low,int high) { if(low>high) //如果左值大于右值说明查找失败 return -1; else { int mid=(low+high)/2; if(x==a[mid]) //如果刚好查找到 return mid; if(x<a[mid]) //如果还没找到,但仍然可能在查找区间内 return BSearch(a,x,low,mid-1); else return BSearch(a,x,mid+1,high); } }
这篇博客介绍了如何在有序序列中使用二分查找算法查找特定元素。文章提供了一个C语言实现的二分搜索函数,并展示了如何在主函数中调用该函数进行多次查找操作。示例输入和输出解释了算法的工作原理,当找到目标元素时返回其在序列中的位置,否则输出Notfound!。
158

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



