在一个1到100的列表中,如何最快找到目标数字,如果按照普通方法遍历,将所有数字都拿出来一一对比,那么最多需要100步。
而二分法每次都会从中间找起,每次都可以排除一半的数字,这样一来会大大减少对比次数,在100以内找到目标数只需要七步。
所以,二分法的关键在于如何找出中间数,100的中间数当然很好找,直接除2就行,但是如果目标数大于50,那么如何在50到100之间找出中间数?
首先我们要设置三个变量来表示1-100的答案范围,分别为:
//list为从1到100的列表
var mid = list.length/2
var low = 1
var high = 100
如果目标数大于50,那么应该将答案范围收缩至50-100,这时候就会发现,如果目标数大于中间数(answer > mid),就只有low的值改变。
那么反过来说,如果目标数小于中间数(answer < mid),那就只有high的值改变,因此判断代码应该是这样:
if(answer > mid){
low = mid
...
} else if(answer