0
点赞
收藏
分享

微信扫一扫

二分查找的实现

卿卿如梦 2022-03-30 阅读 75
c++linuxvim

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.运行结果

举报

相关推荐

0 条评论