0
点赞
收藏
分享

微信扫一扫

二进制查找法

禾木瞎写 2022-04-30 阅读 47
  • 二进制查找法

二进制查找法的基础是二分查找法(折半查找法**),二分查找法把数据列表分开两半,用max值和min值相加除以2求出mid值。

  • 当中间值就是目标值,程序返回相应的值。
  • 当中间值大于目标值,则max值=mid值-1,来缩小范围,再用原来的min值与新的max值求出新的mid值,重复进行来寻找相匹配的值。
  • 当中间值小于目标值,则会min值=mid值+1,来缩小范围,再用原来的max值与新的min值求出新的mid值,重复进行来寻找相匹配的值。
  • 当min值=max值时结束循环,如果在循环结束时还未找到相对应的值设置程序返回值为-1(或者你喜欢的值,本文代码里为-1)。因此我们要注意:在while循环中设置类似这样的 **while (low <= hight)**来用与结束循环。
  • 注意:计算mid值时,不太推荐使用mid=(low+hight)/2这样容易出现数据溢出,推荐使用mid = low + (hight - low) / 2。
  • 二进制查找法就是用二分查找法查找出的数据用于数组元素下标,来查找出目标在数组中的位置。具体可以通过代码示例了解。
//二进制查找法
#include<stdio.h>

int search(int* nums, int numsSize, int target);//二进制查找法函数

int main(void)
{
    int nums[] = { -1,0,3,5,9,12 };     //数组例子nums = {-1,0,3,5,9,12}
    int numsSize, result, target;
    numsSize = (int)sizeof(nums) / sizeof(nums[0]); //计算数组长度
    target = 9;                         //目标例子target = 9
    result = search(nums, numsSize, target);
    if (result == -1)
        printf("Target is not in the array.\n");
    else
        printf("The result is target in the array[%d].\n", result);
    printf("Bye!\n");
    return 0;
}
int search(int* nums, int numsSize, int target) //二进制查找法函数
{
    int low = 0, hight = numsSize - 1;
    while (low <= hight)
    {
        int mid = low + (hight - low) / 2;
        if (nums[mid] == target)
            return mid;
        else if (nums[mid] > target)
            hight = mid - 1;
        else
            low = mid + 1;
    }
    return -1;
}

//初学者分享,如有问题请多多指出,可以进行交流,谢谢。

举报

相关推荐

二进制

玩转二进制

二进制求和

二进制基础

二进制文件

mysqldump二进制

缩短二进制

0 条评论