c++算法:二分
算法中,有一种比线性查找算力费得更少的一种算法思想,叫“分治”,今天讲的是分治里的二分查找:
借助 (low+high)/2公式,找到搜索区域内的中间元素。图 1 中,搜索区域内中间元素的位置是 ⌊(1+10)/2⌋=5,因此中间元素是 27,此元素显然不是要找的目标元素。然后就是缩小范围。
下面就是一个二分查找的c++程序:
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int a[500005]; 5 int n; 6 bool sreach(int key) 7 { 8 int mid,left=1,right=n; 9 while(left<=right)//遍历a[] 10 { 11 mid=(left+right)/2;//寻找中间值 12 if(a[mid]==key)//判断是否查到 13 { 14 return true; 15 } 16 else if(a[mid]<key) 17 { 18 left=mid+1;//缩小范围 19 } 20 else 21 { 22 right=mid-1;//缩小范围 23 } 24 } 25 return false; 26 } 27 int main() 28 { 29 int t,m; 30 scanf("%d",&n); 31 for(int i=1;i<=n;i++) 32 { 33 scanf("%d",&a[i]); 34 } 35 sort(a+1,a+n+1); 36 scanf("%d",&t); 37 while(t--) 38 { 39 cin >> m; 40 if(sreach(m)) 41 { 42 printf("YES"); 43 cout << endl; 44 } 45 else 46 { 47 printf("NO"); 48 cout << endl; 49 } 50 } 51 return 0; 52 }
关于二分到现在基本讲完了,大家拜拜~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)