提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
是一种效率较高的查找方法。它要求线性表必须采用顺序存储结构,并且表中元素按关键字有序排列。二分查找法适用于数据量较大且数据有序的情况,其基本思想是通过不断缩小查找范围来快速定位目标值。。
二、使用步
- 确定查找范围:设查找的数组区间为
[low, high]
,初始时low
为数组的起始索引,high
为数组的结束索引。 - 计算中间位置:计算中间位置
mid = (low + high) / 2
。 - 比较中间值与目标值:
- 如果
array[mid]
等于目标值,则查找成功,返回中间位置mid
。 - 如果
array[mid]
大于目标值,则在左半部分继续查找,即high = mid - 1
。 - 如果
array[mid]
小于目标值,则在右半部分继续查找,即low = mid + 1
。
- 如果
4.重复步骤2和3:直到找到目标值或范围为空,表示未找到目标值
#include <stdio.h>
int binary_search(int array[], int number, int k)
{
int left = 0; int right = number - 1;
while (left<=right)
{
int mid = (left + right) / 2;
if (array[mid] > k)
{
right = mid - 1;
}
else if (array[mid] < k)
{
left= mid + 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};//有序数
int sz = sizeof(arr) / sizeof(arr[0]);//数组元素个数
int key = 0;//测试数
scanf_s("%d", &key);
int ret = binary_search(arr,sz,key);//二进制 寻找
if (-1 == ret)//返回值为-1
{
printf("未在arr中找到该数值");
}
else
{
printf("在arr中找到了,下标是%d,这个数是%d",ret,arr[ret]);
}
return 0;
}