#include <stdio.h>
int search(int low, int high, int a[], int key)
{
if(low > high)
return -1;
int mid = low + (high-low)/2;
if(a[mid] == key)
return mid;
return (a[mid] > key ? search(low,mid-1,a,key) : search(mid+1,high,a,key));
}
int main()
{
int a[] = {12,23,4,56,77,99,134,52};
int n = search(0, sizeof(a)/sizeof(int), a, 99);
printf("%d\n", a[n]);
return 0;
}
int search(int low, int high, int a[], int key)
{
if(low > high)
return -1;
int mid = low + (high-low)/2;
if(a[mid] == key)
return mid;
return (a[mid] > key ? search(low,mid-1,a,key) : search(mid+1,high,a,key));
}
int main()
{
int a[] = {12,23,4,56,77,99,134,52};
int n = search(0, sizeof(a)/sizeof(int), a, 99);
printf("%d\n", a[n]);
return 0;
}
注意 int mid = low + (high - low) / 2;这句,很多面试题目都有这个问题,这个主要是编程的细节问题,开始可能想到这样写:int mid = (low + high) / 2;但是 low,和high的值加起来之后有可能超出int的表示范围,从而使其成为负数。