三种方法实现二分查找
2015-01-02 08:52
323 查看
最近打算研究一下基础的算法,就先从二分开始做吧,三种方法
#include <bits/stdc++.h> using namespace std; const int MAXN = 1024; int num[MAXN]; //生成测试数据 void init() { for(int i = 0; i < MAXN; i++) num[i] = i * 3; } //循环查找 int query1(int n) { int l = 0, r = MAXN; while(l <= r){ int mid = (l + r) >> 1; if(num[mid]==n) return mid; else if(num[mid]<n) l = mid + 1; else r = mid - 1; } return -1; } //递归查找 int query2(int l, int r, int n) { if(l > r) return -1; int mid = (l + r) >> 1; if(num[mid]==n) return mid; else if(num[mid] < n) return query2(mid + 1, r, n); else return query2(l, mid-1, n); } //STL查找 int query3(int n) { if(!binary_search(num, num+MAXN, n)) return -1; return lower_bound(num, num+MAXN, n) - num; } void run() { int n; printf("\n输入要查找的数:"); cin >> n; printf("%d 的下标为:\n", n); //输出-1为不存在 cout << "循环查找:" << query1(n) << endl; cout << "递归查找:" << query2(0, MAXN, n) << endl; cout << "STL查找:" << query3(n) << endl; run(); } int main() { init(); run(); return 0; }
相关文章推荐
- 三种方法实现二分查找
- 二分查找的两种实现方法
- 使用递归和非递归两种方法实现二分查找!!!
- 使用c语言指针和递归方法实现二分查找
- [整理]二分查找搜索算法原理及递归,迭代方法实现
- 经典案例,二分查找的三种实现方式
- C语言经典算法(九)——递归实现二分查找的两种方法
- 算法Java实现 --- 三种静态查找方法
- 一个可能存在Bug的二分查找方法的实现,大家一起看看有什么问题没
- 准确实现二分查找方法
- 二分查找的几种方法对比,C++实现
- 二分查找的三种实现
- 二分查找的两种实现方法
- 经典案例,二分查找的三种实现方式
- php二分查找的两种实现方法
- Collections.sort方法实现Comparator比较器进行二分查找
- Delphi中实现文件拷贝的三种方法
- 用VC 6.0实现串行通信的三种方法
- 三种细边框表格的实现方法比较(转)
- 转 三种方法实现实时切换CSS样式