二分查找总的一个概念是
头加尾,找到中间的数 随后判断中间的数是大了还是小了
然后在找中间值
int townum(int arr[], int sz, int flag) {
// int left = 0;
// int right = sz - 1;
// while (left<right)
// {
// int mid = left + (right - left) / 2;
// int nummid = arr[mid];
// if (nummid < flag) {
//
// left = mid + 1;
//
// }
// else if (nummid > flag) {
// right = mid - 1;
//
//
// }
// else {
// return mid;
// }
// }
// return -1;
//
//
//
//}
那么这里为什么不是头加尾呢 因为如果两个值过大的话容易溢出 所以left+(right-left)/2和头尾相加除以2是一样的。
用sizeof函数来求出数组的大小 随后来判断目标值与mid下标的值的大小
源代码
int townum(int arr[], int sz, int flag) {
int left = 0;
int right = sz - 1;
while (left<right)
{
int mid = left + (right - left) / 2;
int nummid = arr[mid];
if (nummid < flag) {
left = mid + 1;
}
else if (nummid > flag) {
right = mid - 1;
}
else {
return mid;
}
}
return -1;
}