今天学了二分算法:
在一个有序的列表里找一个数,
用for循环,
每次比较中间的数和要找的数,
要找的数大则将头移到中间的数的下一个数,
否则将尾移到中间的数。(头算尾不算)
这是代码:
#include<bits/stdc++.h> using namespace std; int a[100001]; int bs(int a[],int l,int r,int x){ int ret=-1; while(l<r){ int m=(l+r)/2; if(a[m]>x){ r=m; } else if(a[m]<x){ l=m+1; } else return m; } return -1; } int main(){ int n,x,t; cin>>n>>t; for(int i=0;i<n;i++){ cin>>a[i]; } for(int i=0;i<n;i++){ cin>>x; cout<<bs(a,0,n,x)<<" "; } }
样例输入:
5 3
1 3 4 7 9
样例输出:
1(从0开始)
样例解释:
1.比较4和3,
4>3,m=2,r=m。
2.比较3和3,
3=3,m=1,cout<<m。