算法入门——二分:二分查找

时间:2021-06-02 19:20:27   收藏:0   阅读:0

二分查找

一、引子

  设想一个猜数字游戏,A从给定的区间中选择一个数字,B要猜这个数,如果B猜的数大了,就高速B猜大了,如果B猜的数小于A选择的数,就告诉B猜小了。理论上经过有限次的猜数后,B一定可以猜到这个数。

二、算法思想

  通过上述猜数字游戏可以发现B每次猜数字时,其实都对给定的区间进行了压缩,最终B通过不断压缩区间猜到了这个数字。所以二分法其实就是一种压缩区间的思想。

  首先给出二分查找适用的范围:给出一个严格递增的序列A,要求从中找出给定的数X。当然你可以通过遍历一遍数组来实现这个算法,但是这样做算法效率就太低了。而对该算法的一种优化就是压缩区间思想。二分查找算法是基于有序序列的查找算法,接下来对算法进行描述:

  1、定义三个指针left、mid、right,分别指向数组的左边界,中间点,有边界,所以开始时left=0、mid=(left+right)/2、right=n-1(这里n为数值长度)

  2、拿mid指向的元素值与目标元素值进行比较

    如果大于目标值:就向左压缩数组,令right=mid-1然后mid=(left+right)/2;

    如果小于目标值:就向右压缩数组,令left=mid+1然后mid=(left+right)/2;

  3、重复步骤2,直到left>right,此时如果未找到目标元素则说明没有该元素。

  下面给出算法代码

  技术图片

 

   当然,此代码可以使用非递归方式实现。

  

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!