【C语言】数组中的二分法搜索初步理解

本文详细介绍了在C语言中使用二分法查找数组元素的方法,包括其底层逻辑、在C语言中的实现步骤和代码演示,展示了如何通过比较中间值缩小搜索范围以提高查找效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言的方法1---二分法【初步的了解】

1.为什么要学习二分法

如果用传统的方法去查找数组中我们想要的数字,需要一个一个试验过去,非常浪费时间

用for循环来完成

2.二分法的底层逻辑

例如有 1 2 3 4 5 6 7 8 9 10 十个数先给这十个数标下标

            0 1 2 3 4 5 6 7 8 9

我们需要找到的目标数字是7

推算 【1】取中间值(取得是下标的中间值):(0+9=4){4在顺序数列中对应的是5}

    发现取得的对应数字小了,就在这个数字的下标上加1,此时判断数字出现在数字5的右边

     【2】 得到(4+1)+9/2=7{7在顺序数列中对应的是8}

     发现取得的数字大了,就在这个数字的对应下标减去1,此时判断数字出现在数字8的左边,数字5的右边

     【3】得到5+(7-1)/2=5{5在顺序数列中对应的是6}

     发现取得的数字小了,就在这个数字的下标加上1,此时判断数字出现在数字6的右边,数字7的左边

     【4】得到6+(5+1)/2=6{6在顺序数列中对应的是7}

得到正确答案了

3.在c语言中的逻辑

  1. 先给定一个数组
  2. 在给定一个目标k,比如1
  3. 算出字符串的长度sizeof(arr)]/sizeof(arr[0])
  4. 定义左边的为0,右边为字符串长度减1
  5. 再定义一个变量为flag,代表是否取得目标
  6. 用while循环判断,在有序数列中才会有意义,所以左边的数经过循环之后一定会小于等于右边的数字
  7. 用左边的数字加右边的数字/2=中间数字
  8. 得到第一类大情况
  1. 得到的mid>k,k在中间数的左边,则将右边的数字定义为mid-1【fla=0】
  2. 得到的mid<k, k在mid的右边,则将左边的数字定义为mid +1
  3. 得到mid=k说明找到了【flag=1】
  1. 第二大类情况

得不到,说明给的值出错了

代码演示:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值