- 二进制查找法
二进制查找法的基础是二分查找法(折半查找法**),二分查找法把数据列表分开两半,用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;
}
//初学者分享,如有问题请多多指出,可以进行交流,谢谢。