二分查找 算法(持续更新。。。)

mac2024-10-31  11

           想都是问题 做才是答案

lower_bound

#include<iostream> using namespace std; int lower(int *a,int x,int y,int val) { int mid; while(x<=y) { mid=x+(y-x)/2; if(a[mid]<val) { x=mid+1; } else { y=mid-1; } } return x; } int main() { int a[11]={0,1,2,2,3,4,6,6,6,9,10}; int val=6; // 查找第一个大于等于val的数的位置 int pos=lower(a,1,10,val); cout<<pos; return 0; }

 

upper_bound

#include<iostream> using namespace std; int upper(int *a,int x,int y,int val) { int mid; while(x<=y) { mid=x+(y-x)/2; if(a[mid]<=val) { x=mid+1; } else { y=mid-1; } } return x; } int main() { int a[11]={0,1,2,2,3,4,6,6,7,9,10}; int val=2; // 查找第一个大于val的数的位置 int pos=upper(a,1,10,val); cout<<pos; return 0; }

 

最新回复(0)