一,简单的二分查找算法
二分查找(Binary Search)算法是一种针对有序且不含重复数据集合的查找算法,时间复杂度为 $O(logn)$ ,二分查找虽然性能比较优秀,但应用场景也比较有限。
因为底层依赖于数组这种结构,所以不适合数据量大的情况。再次,对于较小规模的数据查找,二分查找的优势并不明显,一般直接使用顺序遍历就可以了。二分查找更适合处理静态数据,也就是没有频繁的数据插入、删除操作。
如果数据使用链表存储,二分查找的时间复杂就会变得很高,变成了 $O(n)$。
简单的二分查找算法的 C++ 代码如下:
// 非递归实现
int BinarySearch(int a[], int n, int value){
int low = 0, high = n-1;
int mid = (low+high)/2;
while( low <= high){
// mid = low+(high-low)/2; mid = low+((high-low)>>1)
mid = (low+high)/2;
if( a[mid] == value ){
return mid;
}
else if (value