查找算法之二分查找的C++实现

二分查找

二分查找算法,说白了就是在有序的数组里面给予一个存在数组里面的值key,然后将其先和数组中间的比较,如果key大于中间值,进行下一次mid后面的比较,直到找到相等的,就可以得到它的位置。

前提:线性表中的记录必须是关键字有序(通常从小到大),线性表必须采用顺序存储。
基本思想:取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;否则,在右半区查找。不断重复,直到查找成功或查找失败为止。

示例代码如下:

/*折半查找,递归实现*/  
template<class T>  
int Binary_Search(T *x, int N, T keyword)  
{  
    int low = 0, high = N-1,mid;  
    while(low <= high)  
    {  
        mid = (low + high)/2;  
        if(x[mid] == keyword)  
            return mid;  
        if(x[mid] < keyword)  
            low = mid + 1;  
         else  
            high = mid -1;  

    }  
    return -1;  
}  
/*折半查找,递归实现*/  
int Binary_Search2(int *a, int low, int high, int key)  
{  
     if(low > hign) 
          return -1;
     int mid = (low + high) / 2;  
     if(a[mid] == key)  
          return mid;  
     if(a[mid] > key)  
          return Binary_Search2(a, low, mid-1, key);     //有没有return都可以。 
     else  
          return Binary_Search2(a, mid+1, high, key);     //有没有return都可以。 
}  

后记:

查找和排序都是在程序设计中经常用到的算法,查找相对而言较为简单,不外乎顺序查找、二分查找、哈希表查找和二叉排序树查找。
在面试的时候,不管是用循环还是用递归,面试官都期待应聘者能够信手拈来写出完整的二分查找代码,否则可能连继续面试的兴趣都没有。

以上两句话引出自《剑指Offer:名企面试官精讲典型面试题》,昨天去面试一家私企,面试官出的第一道编程题是二分查找,问得我一头雾水,当时就悲剧了,回来以后看到书中这句话,深刻理解了它的含义。
水平非常有限,代码有出错的地方,希望大家指正,免得误导新人。

    原文作者:查找算法
    原文地址: https://blog.csdn.net/chen_jing1_17/article/details/79798054
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞