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

时间:2021-05-01 10:37:32

二分法逻辑:

  • 给定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 }