hfuuss / algorithm-JS

ACM算法总结 总结在Issues里面
1 stars 0 forks source link

15|二分查找(上):如何用最省内存的方式实现快速查找功能? #15

Open hfuuss opened 5 years ago

hfuuss commented 5 years ago

1.循环退出条件 注意是low<=high,而不是low<high。 2.mid的取值 实际上,mid=(low+high)/2这种写法是有问题的。因为如果low和high比较大的话,两者之和就有可能会溢出。改进的方法是将mid的计算方式写成low+(high- low)/2。更进一步,如果要将性能优化到极致的话,我们可以将这里的除以2操作转化成位运算low+((high-low)>>1)。因为相比除法运算来说,计算机处理位运算要 快得多。 3.low和high的更新 low=mid+1,high=mid-1。注意这里的+1和-1,如果直接写成low=mid或者high=mid,就可能会发生死循环。比如,当high=3,low=3时,如果a[3]不等于value,就 会导致一直循环不退出。 如果你留意我刚讲的这三点,我想一个简单的二分查找你已经可以实现了。实际上,二分查找除了用循环来实现,还可以用递归来实现,过程也非常简单。

hfuuss commented 5 years ago

先排序,然后再用二分法搜索