与二分查找法相似,也是必须先进行排序,对比二分查找法只修改一行代码
int binarySearch(void *p, int key ,int size ) {
int *arr = p;
//mid = (high + low) / 2 mid = hight + (low - high)* 一个比例
int count = 0; // mid = hight + (low - high)* 1.0 * key - arr[high]/arr[low]-arr[high] //拉格朗日插值
for (int high = size - 1 , low = 0 , mid = 0; low <= high;
mid = (high + low) / 2 // 2分查找法
//mid = high + (low - high)* 1.0 *( key - arr[high]) / (arr[low] - arr[high])//拉格朗日插值
)
{
count++;
printf("最大值 %d 最小值 %d 中间值 %d %d次查询\n", high, low, mid, count);
int mindValue = arr[mid];
if (mindValue == key)
return 1;
else if (mindValue>key)
high = mid - 1;
else
low = mid + 1;
}
return 0;
}