二分查找【循环和递归】

对一个数组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("\n");
31     }
32     printf("\n");
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\n",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
复制代码

 

posted on   华山青竹  阅读(452)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示