C语言二分查找目标数值
什么是二分查找?
二分查找,可称为折半查找,定义一个数值,在有序的数组中的下标进行查找目标数值。
如何实现二分查找?
我们定义一个范围,left为最开始下标,定义right为数组中的最后一个下标
我们由left往right依次开始循环
定义变量Mid为数组中的中间数left+(right-left)/2或者(left+right)/2,由Mid对目标数值进行比较,一步步缩小范围
Mid>目标数,则Mid-1,right更改为Mid-1
Mid<目标数,则Mid+1,left更改为mid+1
当我们将定义的条件设置为循环,我们就可以一步步筛选找到所想查找的目标数值
main主函数代码:
int main()
{
//数组二分查找
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
int sz = sizeof(arr) / sizeof(arr[0]);
int aim = 4;//所要查找下标为4的元素
int rec = Binary_search(arr, sz, aim);//这里我们调用二分查找的函数,用rec来接收数值
//判断返回值
if(rec==-1)//返回-1,未找到目标值
{
printf("元素不在当前数组中");
}
else//找到返回值
{
printf("目标下标值的元素为%d ", rec);
}
return 0;
}
Binary_search函数
int Binary_search(int arr[],int sz,int aim)
{
int left = 0;//左侧端点的起点;
int right = sz - 1;//右侧的端点终点;sz为总数-1下标为最后一个元素值
while(left<=right)//由左侧到右侧的循环
{
int Mid = left+(right-left) / 2;//折半查找,计算中间点的位置
if(arr[Mid]==aim)
{
return Mid;//如果Mid为我们想要查找的数值则返回;
}
else if(arr[Mid]<aim)
{
left = Mid + 1;//中间点<aim,Mid+1搜索右半段;
}
else//if(arr[Mid]>aim)
{
right = Mid - 1;
}
}
return -1;
}
整体代码实现:
#include<stdio.h>
int Binary_search(int arr[],int sz,int aim)
{
int left = 0;//左侧端点的起点;
int right = sz - 1;//右侧的端点终点;sz为总数-1下标为最后一个元素值
while(left<=right)//由左侧到右侧的循环
{
int Mid = left+(right-left) / 2;//折半查找,计算中间点的位置
if(arr[Mid]==aim)
{
return Mid;//如果Mid为我们想要查找的数值则返回;
}
else if(arr[Mid]<aim)
{
left = Mid + 1;//中间点<aim,Mid+1搜索右半段;
}
else//if(arr[Mid]>aim)
{
right = Mid - 1;
}
}
return -1;
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
int sz = sizeof(arr) / sizeof(arr[0]);
int aim = 4;//所要查找下标为4的元素
int rec = Binary_search(arr, sz, aim);
if(rec==-1)//返回-1,未找到目标值
{
printf("元素不在当前数组中");
}
else//找到返回值
{
printf("目标下标值的元素为%d ", rec);
}
return 0;
}
运行代码:
o(▽)o谢谢大家!!!!!!