1001 二分查找
2015-08-03 12:04
417 查看
采用递归算法,递归调用本身
不断把给定数组分为两半,并确定待查找元素key属于哪一半,并在其所属的那一半里继续查找,直到找到待查找元素,如果找不到,即第N次分的数组只有一个元素时,输出NO。
注意,给定数组元素是已经按从小到大的顺序排好序的。
不断把给定数组分为两半,并确定待查找元素key属于哪一半,并在其所属的那一半里继续查找,直到找到待查找元素,如果找不到,即第N次分的数组只有一个元素时,输出NO。
注意,给定数组元素是已经按从小到大的顺序排好序的。
#include <iostream> using namespace std; int m,n; int a[10000],b[50000]; void search(int start,int end,int key) { if(start==end) cout<<"NO"<<endl; else if(a[start]==key||a[end]==key) cout<<"YES"<<endl; else{ int mid=(start+end)/2; if(a[mid]==key) cout<<"YES"<<endl; else if(a[mid>key]) //起始,终止和中间元素都不等于key值,则看key在哪个范围内,在划分好的范围内再找 search(start,mid,key); else search(mid+1,end,key); } } int main() { int i,j; cin>>n; for(i=0;i<n;i++) cin>>a[i]; cin>>m; for(j=0;j<m;j++) cin>>b[j]; for(j=0;j<m;j++) //一个一个查找待查元素 search(0,n-1,b[j]); return 0; }
相关文章推荐
- ios多线程开发的常用三种方式
- 同步和条件变量
- try-catch-finally的使用
- 客户端和服务器通讯 方法(2)
- Morris Traversal方法遍历二叉树
- NGUI初探之UIRoot
- Linux - EXT2文件系统
- Linux - EXT2文件系统
- Android 简单sd卡浏览器
- 图论浅析--最小生成树之Kruskal
- 图论浅析--最小生成树之Kruskal
- 背景附件 background-attachment
- 1002 归并排序
- java连接mysql 连接数太多
- MFC学习
- java笔记(一)[static和final常量&String.format()问题&Array类&finalize方法及内存回收]
- 填补新版SDWebImage使用
- PHP使用CURL详解
- NOI2011 阿狸的打字机
- 分布式程序设计