二分查找的实现

1.基本概念:二分查找是一种常见的查找算法,是在已经排好顺序的数组中找到想要找到的数字或者字符

2.使用条件:已经排好顺序的数组

3.基本思路

和游戏“数字炸弹”一样,通过不断二分缩小边界,快速找到需要的数字。

如图数组元素为11-19,我们需要找到数字13,并返回下标。因为数组是排好序的,所以我们选择中间元素15和目标数13比较,发现中间数字大于13,所以13一定是在中间元素15的左半边区间。

然后我们将右边界收缩到15,即15右边的数字舍弃,继续循环使用以上步骤,将中间元素13和目标数13比较,相等返回下标。

此题重点是边界收缩的思路。

4.代码实现

#include<stdio.h>
   int main(){
   
     int nums[]={11,12,13,14,15,16,17,18,19};
     int find=13;    //目标数字
   
     int left=0;       //左边界
     int right=sizeof(nums)/4-1;
      //右边界,先计算数组长度,然后除以4(一个int 4个字节),就是数组元素个数
  
    int mid=0;
  
    while(left<=right){
  
          mid=(left+right)/2;
          if(nums[mid]<find){
              left=mid+1;           //收缩左边界至中心:
          }
  
             else if(nums[mid]>find){
                right=mid-1;        //收缩右边界至中心
                }
  
            else if(nums[mid]==find){
              printf("%d\n",mid);
              return 0;                                                                                                                                               
               }
      }
          printf("未找到");    //如果未找到,打印未找到
        return 0;
  }

 

5.运行结果

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
二分查找是一种高效的查算法,适用于已经排序好的列表。 实现思路如下: 1. 确定查范围:首先需要确定要查的列表的起始索引和结束索引。初始情况下,起始索引为0,结束索引为列表长度减1。 2. 计算中间元素:根据起始和结束索引,计算中间元素的索引。可以使用整数除法来计算中间索引,例如 `mid = (start + end) // 2`。 3. 判断中间元素和目标值的关系:将中间元素与目标值进行比较。如果中间元素等于目标值,则返回中间元素的索引;如果中间元素大于目标值,则说明目标值在中间元素的左侧,更新结束索引为中间索引减1;如果中间元素小于目标值,则说明目标值在中间元素的右侧,更新起始索引为中间索引加1。 4. 重复执行步骤2和步骤3,直到到目标值或起始索引大于结束索引为止。 5. 如果最终没有到目标值,则返回一个特定的标识(例如-1)表示未到。 以下是一个用Python实现二分查找的示例代码: ```python def binary_search(arr, target): start = 0 end = len(arr) - 1 while start <= end: mid = (start + end) // 2 if arr[mid] == target: return mid elif arr[mid] < target: start = mid + 1 else: end = mid - 1 return -1 # 示例使用 arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] target = 6 result = binary_search(arr, target) if result != -1: print("目标值在索引", result) else: print("未到目标值") ``` 这段代码会输出"目标值在索引5",因为数字6在列表中的索引是5。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗二叉树_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值