二分查找的时间复杂度为 O(log n) , 它远远好于顺序查找的 O(n) 时间复杂度。
但是二分查找的前提是线性表或数组中的记录必须是关键码有序(通常是从小到大),这可以调用C++的STL中的sort排序。
代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
//a为数组, n为要查找的数组长度, key为要查找的关键字
int Binary_Search(int *a, int n, int key){
int low, high, mid;
low = 0;
high = n-1;
while(low <= high){
mid = (low + high) / 2;
if(key < a[mid])
high = mid - 1;
else if( key > a[mid])
low = mid + 1;
else
return mid;
}
return 0;
}
int main(){
int a[100000];
int key, n;
cin>>n>>key;
for(int i=0; i<n; i++)
cin>>a[i];
cout<<Binary_Search(a, n, key); //输出函数返回的 key值 在 数组a 的 位数
return 0;
}