二分查找
来源:互联网 发布:2012-2015淘宝交易数据 编辑:程序博客网 时间:2024/05/23 11:22
譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为:
1.第一步查找中间元素,即5,由于5<6,则6必然在5之后的数组元素中,那么就在{6, 7, 8, 9}中查找,
2.寻找{6, 7, 8, 9}的中位数,为7,7>6,则6应该在7左边的数组元素中,那么只剩下6,即找到了。
二分查找算法就是不断将数组进行对半分割,每次拿中间元素和goal进行比较。
在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,此例是假设为升序表
#include <iostream>using namespace std;//二分查找int binary_search(int* a, int len, int goal);int main(){ const int LEN = 10000; int a[LEN]; for (int i = 0; i < LEN; i++) a[i] = i - 5000; int target = 0; int index = binary_search(a, LEN, target); if (index != -1) cout<<target<<"在数组中的下标为"<<index<<endl; else cout<<"不存在"<<target<<endl; return 0;}int binary_search(int* a, int len, int goal){ int low = 0; int high = len -1; while (low <= high) { int middle = (high - low) / 2 + low; // 直接使用(high + low) / 2 可能导致溢出 if (a[middle] == goal) return middle; //在左半边 else if (a[middle] > goal) high = middle - 1; //在右半边 else low = middle + 1; } //没找到 return -1;}
转自http://www.cnblogs.com/shuaiwhu/archive/2011/04/15/2065062.html
0 0
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 学生党该如何用好iMindMap思维导图
- Android的apk文件是怎么怎么生成的?
- cocos2d-x类型转换(CCstring int string char UTF-8互转)
- 多线程实现方式---实现Runnable接口
- Android 屏幕操作原理
- 二分查找
- VLC组播
- 关于SVProgressHUD库
- 第五次c++实验
- 在线压缩htmlcssjs地址
- Ubuntu 14.04中安装Sublime Text 3并使用SublimeClang插件
- iOS应用架构谈(一):架构设计的方法论
- Spring4 整合 Redis
- HDU 1407 测试你是否和LTC水平一样高 (暴力)