原始:mid = low + 1/2(high-low)
新的:mid = low + (key-a[low]) / (a[high]-a[low]) * (high-low);
//数组下标从1-n开始存
#include<stdio.h>
#include<iostream>
using namespace std;
int Binary_Search(int *a, int n, int key)
{
int low, high, mid;
low = 1;
high = n;
while (low <= high)
{
mid = low + (key-a[low]) / (a[high]-a[low]) * (high-low);
if (key < a[mid])
{
high = mid - 1;
}
else if (key > a[mid])
{
low = mid + 1;
}
else
return mid;
}
}
int main()
{
int a[11] = { 0, 1, 16, 24, 35, 47, 59, 62, 73, 88, 99 };
int s = 62;
int x = Binary_Search(a, 11, s);
cout << x << endl;
getchar();
}