left=0 right=length-1时,当进行left和right移动的时候一定要等于二分点+1或二分点-1 (不然,假设终止条件是left>right,当target=arr[lenth-1]的时候会死循环)
left=0 right=length时, 当进行left和right移动的时候就可以等于二分点
why?
如下情况,当right=left+1时,二分点一定是left,而当target=arr[right]时,进入死循环。所以在进行left移动和right移动的时候一定要注意+-1
而让right=length进行初始化可以有效避免这一个问题。因为在初始状态下,不可能有arr[right]=target,而在非初始状态下到达arr[right(也就是上一步的二分点)]=target的前提条件是在上一步比较中arr[二分点]>target,这显然是自相矛盾的。所以这样初始化可以不用在意在移动left和right时是否对二分点+-1。
arr[left]=target根本无需考虑。因为二分点总能落在left上从而顺利结束循环。