数据结构与算法1——二分法

二分法逻辑:

  • 给定N个从小到大排好序的整数序列List[],以及某待查找整数X,
  • 我们的目标是找到X在List中的下标。即若有List[i]=X,则返回i;否则返回-1表示没有找到。
  •   二分法是先找到序列的中点List[M],与X进行比较,若相等则返回中点下标;
  • 否则,若List[M]>X,则在左边的子系列中查找X;若List[M]<X,则在右边的子系列中查找X。
  • 最坏情况下的复杂度 log2(n)

 


代码示例:

  •       
     1 #include <stdio.h>
     2 #include <math.h>
     3 #define num 3
     4 void putin(double *);
     5 int search(double *);
     6 void main()
     7 {
     8     double a[num];
     9     putin(a);
    10     printf("查找到的数字的下标是%d\n",search(a));
    11 
    12 }
    13 
    14 void putin(double *a)
    15 {
    16     int i;
    17     printf("输入%d个数字",num);
    18     for(i=0;i<num;i++)
    19         scanf("%lf",(a+i));
    20 }
    21 
    22 
    23 int search(double *a)
    24 { 
    25     int m=0,n=num-1,middle;
    26     double find;
    27     printf("输入要查找的数字");
    28     scanf("%lf",&find);
    29     while(m<=n)
    30     {middle=(m+n)/2;
    31       if(find==a[middle]) return middle;
    32      else if(find<a[middle]) n=middle-1;
    33      else if(find>a[middle]) m=middle+1;
    34     }
    35     return -1;
    36      
    37   
    38 }

     

 

转载于:https://www.cnblogs.com/guoshiyv/p/7017177.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值