优点:比较次数少、查找速度快、平均性能好
缺点:待查找表为有序表、插入删除困难
思路
假设表为升序排列,中间元素和待查元素比较,如果中间元素和待查元素相等找到了;如果小于则在前半段找;否则在后半段找。
代码
#include <iostream> #include <cstdlib> using namespace std; int binSearch(const int a[], int beg, int end, int value) { while(beg <= end) { int mid = beg + (end - beg) / 2; if(a[mid] == value) return mid; else if(a[mid] < value) beg = mid + 1; else end = mid - 1; } return -1; } int main(int argc, char **argv) { int a[] = {1, 3, 5, 7, 8}; int value = atoi(argv[1]); size_t size = sizeof(a) / sizeof(int); int loc = binSearch(a, 0, size-1, value); if (loc == -1) cout << "Not find" << endl; else cout << "Loc:" << loc << endl; }
结果
原文:http://www.cnblogs.com/kaituorensheng/p/3550151.html