while (1)
{
mid = (left + right)/2;
if (num == input[ mid ])
{
break ;
}
else if ( num > input [mid ])
{
left = mid +1;
} else if ( num < input [mid ])
{
right = mid -1; //因为 mid 位置已经不可能是要找的值了,所以缩小边界
}
}
while (left != right)
{
mid = (left + right)/2+1;
if (num >= input[ mid ])
{
left = mid ;
} else // if (num < input[mid])
{
right = mid -1;
}
} //mid 后加导致mid 计算得到的值可能与 right 一样,为了防止死循环, right 就一样要不等于 mid,所以等于 mid-1
// 同理,如果 mid=(left+right)/2这样,此刻 mid 值可能与left 一样,那么设置时就不能直接等于 mid ,此时等于号也应该在 else中
注意在后者中,所查数在left和right位置上,此刻两个值相等,而不是mid。二分查找的难点是避免死循环的出现