int binarysearch(int number)
{
int mid, start = 0, end = LEN - 1;
while (start <= end) {
mid = (start + end) / 2;
if (a[mid] < number)
start = mid + 1;
else if (a[mid] > number)
end = mid - 1;
else
return mid;
}
return -1;
}
乍一看,毫无BUG,实在危险重重。start和end、mid都是int 型,如果start+end超出了int的界限怎么办?
所以mid = (start + end) / 2是非常危险的。
改法:
1、类型都要改为unsigned int型
2、mid = (start + end) / 2 改为 mid = start + (end - start) / 2