0
点赞
收藏
分享

微信扫一扫

二分查找一遍过

十里一走马 2022-03-20 阅读 62
算法

二分查找

使用场景

  1. 有序数组,查找固定值。
  2. 查找一个值。

算法思路

  • 首先设数组首部(left)和尾部(right),以及中间位(middle).
  • 设置目标值(target).
  • 用中间位与目标值相比较,如果中间值大于目标值,说明包括中间值以及中间值右边的所有数值都大于目标值(注意是有序数组),这时可以把尾部挪到中间值的前一个数值上。
  • 如果中间值小于目标值,说明包括中间值在内以及中间值左边的值都小于目标值,这时就把首部挪到中间值往右一位的地方。
  • 接着思考中间位,中间位在首地址不动时,不用加上首地址的地址。当首地址往前挪动的时候,尾部减去首部会变成一个很小的数字(小于首部),所以要注意加上首部,才可以把中间位加到真确的位置。
  • 思考循环:当left < = right 时可以结束循环,注意当left 等于 right 时,指向的是一个数字,这个数字可以是目标值。但当这个值大于目标值的时候,尾部就要向前移动一位(right–);如果这个值小于目标值的时候,首部就要向前移动一位(left);所以当要把目标值插入到合适的位置时只要返回left的值就可以了,left的值正好是目标值的合适位置。

代码实现

int search(int *array, int len, int target) // 数组 , 数组长度, 目标值
{
    int left = 0;
    int right = len - 1;
    while(left <= right)
    {
    	int middle = left + (right - left) / 2; 
        if(array[middle] == target)
            return middle;
        if(array[middle] > target)
            right = middle - 1;
        else
            left = middle + 1;
    }
    return -1;
}
举报

相关推荐

0 条评论