/* 折半查找 */
int Binary_Search(int *a, int n, int key)
{
int low, high, mid;
/* 定义最低下标为记录首位 */
low = 1;
/* 定义最高下标为记录末位 */
high = n;
while (low <= high)
{
/* 折半 */
mid = (low + high) / 2;
/* 若查找值比中值小 */
if (key < a[mid])
/* 最高下标调整到中位下标小一位 */
high = mid - 1;
/* 若查找值比中值大 */
else if (key > a[mid])
/* 最低下标调整到中位下标大一位 */
low = mid + 1;
else
/* 若相等则说明mid即为查找到的位置 */
return mid;
}
return 0;
}
/*递归折半查找*/
int Binary_Search(int a[], int key, int low, int high)
//数组地址a,查找关键字key,最低下标low,最高下标high
{
if (low > high)
return -1;//找不到时
int mid = (low + high) / 2;
if (key == a[mid])
return mid;
else if (key < a[mid])
return Binary_Search(a, key, low, mid - 1);//递归,在前半区间查找
else
return Binary_Search(a, key, mid + 1, high);//递归,在后半区间查找
}