分治算法----折半查找---非递归二分法
循环的终止条件while(L<=R)
#include<iostream> #include<cstdio> #define maxn 1010 using namespace std; int a[maxn],key;//key是需要查找的关键字 int main(void) { int n; freopen("half.in","r",stdin); freopen("half.out","w",stdout); cin >> n; for(int i=1;i<=n;i++) cin >> a[i]; cin >> key; if(key<a[1] || key>a[n]) cout << -1 << endl; //这里是一个简单的判断,可以省略 else { int p = -1; //使用p记录位置 int L=1,R=n; while(L<=R) { int mid=(L+R)/2; if(a[mid]==key) { p = mid; break; } else if(a[mid]<key) L=mid+1; else if(a[mid]>key) R=mid-1; } cout << p << endl; } return 0; }