1、前提:
元素必须是有序的,若是无序,需要先进行排序。
2、基本思想:
假设元素表从小到大有序排列。用要查找的值x与中间节点的关键字比较,若相等,查找成功。若x小于中间节点的值,查找左表,若x大于中间节点的值,查找右表。这样递归进行,直到查找到或查找结束发现表中没有这样的节点。
3、复杂度分析:
最坏情况下,关键词比较次数为log2 (n+1)。所以,时间复杂度为O(log2 n).
4、代码及测试:
#include <iostream>
#include <assert.h>
using namespace std;
//二分查找非递归实现
template <class T> //使用模版函数,可以适用于不同类型:int 、float、double等
int BinarySearch(T a[], const T & x, int n) {
int left = 0, right = n - 1;
while(left <= right) { //注意这里不能丢掉=,否则不能查找数组最后一个数
int mid = (left + right)/2;
if(a[mid] =