• 二分查找【循环和递归】


    对一个数组a,在区间下标[x,y]寻找p是否存在,存在则返回下标,否则返回-1。

    循环和递归实现:(练习用的程序)

     1 #include <stdio.h>
     2 #include<stdlib.h>
     3 #include<time.h>
     4 
     5 int binSerrch(int a[],int x,int y,int p);//在非递减数组a的x到y区间寻找p,假如存在则返回p的下标,否则返回-1
     6 int binSerrch2(int a[],int x,int y,int p);//递归实现 
     7 int cmp(const void *a,const void *b)
     8 {
     9     int x,y;
    10     x=*(int *)a;
    11     y=*(int *)b;
    12     return x-y;
    13 }
    14 int main(int argc, char *argv[])
    15 {
    16     int a[20];
    17     int i;
    18     int p,ans1,ans2;
    19     
    20     srand((unsigned)time(0));
    21     
    22     for(i=0;i<20;i++)
    23         a[i]=rand()%50+1;
    24     
    25     qsort(a,20,sizeof(a[0]),cmp);
    26     
    27     for(i=0;i<20;i++)
    28     {
    29         printf("%d ",a[i]);
    30         if((i+1)%10==0) printf("
    ");
    31     }
    32     printf("
    ");
    33     
    34     for(i=1;i<=10;i++)
    35     {
    36         p=rand()%50+1;
    37         ans1=binSerrch(a,0,19,p);
    38         ans2=binSerrch2(a,0,19,p);
    39         printf("%d %d %d
    ",p,ans1,ans2);
    40     }
    41     
    42     return 0;
    43 }
    44 int binSerrch(int a[],int x,int y,int p)//在数组a的x到y区间寻找p,假如存在则返回p的下标,否则返回-1
    45 {
    46     int mid;
    47     while(x<=y)
    48     {
    49         mid=(x+y)/2;
    50         if(a[mid]==p)
    51             return mid;
    52         else if(a[mid]>p)
    53             y=mid-1;
    54         else
    55             x=mid+1;
    56     }
    57     return -1;
    58 }
    59 int binSerrch2(int a[],int x,int y,int p)//递归实现 
    60 {
    61     int mid;
    62     if(x>y) return -1;
    63     else 
    64     {
    65         mid=(x+y)/2;
    66         if(a[mid]==p) return mid;
    67         else if(a[mid]>p) return binSerrch2(a,x,mid-1,p);
    68         else return binSerrch2(a,mid+1,y,p);
    69     }
    70 }
    View Code
  • 相关阅读:
    前后端分离实践 — 如何解决跨域问题
    bower 和 npm 的区别详细介绍
    yeoman-bower-grunt之间的关系
    软件开发环境-开发环境、测试环境、生产环境的区别
    Tomcat下配置JNDI的三种方式
    SSE
    Java动态代理
    Css之Relative
    多线程之——死锁
    JVM
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/4476918.html
Copyright © 2020-2023  润新知