二分查找【循环和递归】
对一个数组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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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