二分法查找c语言案例,二分法查找(C语言)

二分法是一种高效的查找方法,其适用于已经排好序的数组

基本思路

从数组最中间的数开始查找判断,若不是需要查找的数字,则比较大小,之后则在从中间分开的两边中的一边从最中间开始查找判断,以此类推

算法描述

这里以升序数组为例,降序数组类似

记录数组最中间数的下标,将其中的数与要查找的数进行比较

若相等,停止查找,若大于要查找的数,则将数组下标上限换为较大半区的最小下标;若小于要查找的数,则将数组下标的下限换为较小半区的最大下标

重复第一步,直到数组下标不能调换,若查找到则停止查找,若未找到,则返回不存在的结果

代码实现

这里以升序数组为例,降序数组类似

# include

int f(int, int [], int);

int main()

{

int n;

int arr[10]={1,2,3,4,5,6,7,8,9,10};

scanf("%d", &n);//输入要查找的数

int m=f(n, arr, 10-1);

if(f(n, arr, 10-1)!=-1)

printf("该数所在下标为:%d

", m);

else

printf("该数不存在

");

}

int f(int n, int a[], int h)

{

int i, l, mid;

l = 0;

while(l<=h)//注意有等号,因为可能最后一次查找就只剩一个数,则这时上下限下标相等

{

mid=(l+h)/2;//计算中间下标

if(a[mid]==n)//判断是否为目标数

return mid;

else if(a[mid]

l=mid+1;//如果中间数小于目标数,则将数组下限改为较大半区的下限

else

h=mid-1;//如果中间数大于目标数,则将数组上限改为较小半区的上限

}

return -1;//返回-1表示目标数不存在

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值