二分查找

1.好处

二分查找(折半查找)效率高,时间复杂度低,但是仅能用于有序数组

2.代码及其逻辑

二分查找的逻辑就是通过我们想要找到的值与中间量(mid)作比较,来不断缩小范围,如果说我们想要查找的值比中间量要大,那么我们就会取前半个区间,在进行一次与中间量的比较,不断的循环,就能找到我们想要查找的那个值,代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,11,13,15};
int sz = sizeof(arr) / sizeof(arr[0]);
int right = sz - 1;
int left = 0;
int k = 0;
scanf("%d",&k);
while(left <= right)
{
int mid = (left + rgiht) / 2;
if (arr[mid] < k)
    left = mid + 1;
else if (arr[mid] > k)
    right = mid - 1;
else
{
    printf("找到了,下标是%d",mid);
    break;
}
if (left > right)
    printf("查找错误");
return 0;
}

这段代码中,left代表我们所取的区间中的最小值的编号,right则是最大值的编号,mid就是中间量,在刚刚开始查找时,先让我们想要查找的值与中间量arr[mid]进行比较,如果k > arr[mid],那么此时我们就应该把范围缩小,及left应该要等于mid + 1,这样我们的查找范围就缩小了一半,同理,当arr[mid] > k 时,我们就应该让right = mid - 1,如果正好arr[mid] = k,那就可以直接输出结果,到这里我们才算完成了一次查找,但一般情况下一次查找不能完成任务,所以我们要进行多次查找,当left  < right时,就说明还有数组中还有元素没有查找到,以循环条件就是当left <= right进入循环,当letf  > right 时,就说明该数组中没有我们要查找的元素,此时就可以输出结果,查找错误(这里没有考虑内存溢出的问题,就是非常浅薄的对二分查找的一个说明)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值