题目:在v[0]<=v[1]<=v[2]<=…<=v[n-1]中查找x
创建一个binsearch函数,在该函数中,首先将x与数组的中间值mid进行比较。如果x大于中间元素mid,则会在该数组的后半部分查找;同理如果x小于中间元素mid,则在该数组的前半部分查找。在这两种情况下都是将x在与各部分的mid进行比较,直到找到匹配的数值。如若没有查找到指定的数值,则函数返回-1。PS:折半查找必须满足数组为升序或降序排列
具体代码如下:
int binsearch(int x, int v[], int n)
{
int low, high, mid;
low = 0;
high = n - 1;//数组下标为介于0~n-1之间
while (low <= high) {
mid = (low + high) / 2;
if (x < v[mid])
high = mid - 1;//数组下标最小值不变,最大值比中间值下标少1
if (x > v[mid])
low = mid + 1;//数组下标最大值不变,最小值比中间值下标多 1
else
return (mid);
}
return (-1);
}