C语言二分查找详解

二分查找的步骤

(1) 假定这里有一个升序的数组,那么首先要确定查找区间的中间位置,即mid=left+(right-left)/2;

(2) 将待查找值与中间位置的值进行比较,如果两个值相等,说明已找到,则返回下标;

(3) 若大于中间位置的值,将在后半区域中继续折半查找;

(4) 若小于中间位置的值,将在前半区域中继续折半查找;

(5) 查找成功,则返回数值的数组下标。

理解二分查找其实很容易,但在C语言中,由于数组的下标是从0开始的,导致二分查找算法中出现了多个变量,这就要求在编程的过程中具体数值和下标都要把控好。

打个不是特别恰当的比方,在现实生活中二分查找就是一元函数,而到了C语言中二分查找就是二元函数,有多个变量要去把控。

上代码。详细说明都在注释中

#include <stdio.h>

int main()

{

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

int sz = sizeof(arr) / sizeof(arr[0]);

//sizeof(arr)是求arr这个数组有多少字节的

//sizeof(arr[0])则是求下标为0的那个成员有多少字节

//前者除以后者就是数组成员的数量

int left = 0;

int right = sz - 1;

//这里的left和right都是下标的值,所以left是0,right减去1

int k = 6;

//以查找6的下标为例

while (left <=right)

{

int mid = left + (right - left) / 2;

//确定中间位置的下标

if (k > arr[mid])

{

left = mid + 1;

//由于要查找的数大于中间位置的值,这里重新定义left

}

else if(k<arr[mid])

{

right = mid - 1;

//由于要查找的数小于中间位置的值,这里重新定义right

}

else

{

printf("下标为%d\n",mid);

//这是left和right相等的情况

break;

//直到left和right相等,终止循环。若不终止,会造成死循环

}

}

if (left > right)

{

printf("没有找到下标");

//这是没有找到下标的情况

}

return 0;

}

如有错误或需要补充,欢迎与博主联系和探讨。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值