二分
循环
int search1(int a[], int len,int key) {
int l = 0, r = len - 1;
while (l <= r) {
int mid = l + (r - l) / 2;
if (a[mid] == key)return mid;
else if(a[mid] > key)r = mid - 1;
else l = mid + 1;
}
return -1;
}
递归
int search2(int a[], int l, int r, int key) {
if (l > r)return -1;
int mid = l + (r - l) / 2;
if (a[mid] == key)return mid;
else if (a[mid] < key)return search2(a, mid + 1, r,key);
else return search2(a, l, mid - 1,key);
}