二分查找算法
来源:互联网 发布:淘宝店铺添加手机桌面 编辑:程序博客网 时间:2024/06/04 19:56
二分查找算法
二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{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进行比较。
示例代码:
#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;}
0 0
- 查找算法 二分查找
- 查找算法:二分查找
- 算法--查找--二分查找
- 查找算法---二分查找
- [算法]二分查找算法
- 算法----二分查找算法
- 查找算法:二分查找算法
- [转载]查找算法----二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法_二分查找
- 算法 二分查找(折半查找)
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- XZ_HTML之HTML<div>和<span>
- 记录学习mac os swift 的每一天
- 微信网页扫码支付模式一和模式二的适用场景
- [转]微服务与SOA之间差了一个ESB
- hdu5550Game Rooms
- 二分查找算法
- html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
- i2c 与 spi 设备在新版内核中不采用DTS设备树形式 在驱动添加设备信息(board_info)的方法
- java内存区域和GC机制
- 自动化gulp使用方法
- 自动更新技术的选择
- [C++]在程序中高效实用STL
- POJ3258
- Redis集群部署文档(centos6系统)