标签:说明 接下来 一个 二分查找算法 长度 com 中间 元素 二分
二分查找
一、引子
设想一个猜数字游戏,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,此时如果未找到目标元素则说明没有该元素。
下面给出算法代码
当然,此代码可以使用非递归方式实现。
标签:说明 接下来 一个 二分查找算法 长度 com 中间 元素 二分
原文地址:https://www.cnblogs.com/zyq79434/p/14833524.html