二分查找
对于给定的已经有序的数列,我们需要在该数列中查找是否存在某个元素的时候使用。
public static int biSearch(int []array,int a){ int l=0; int r=array.length-1; int mid; while(l<=r){ mid=l + (r-l)/2; if(array[mid]==a){ return mid; }else if(array[mid]<a){ lo=mid+1; }else{ hi=mid-1; } } return -1; }
中点为什么是
mid=l + (r-l)/2;
一般用mid = (l + r) / 2求中点会可能导致
1:溢出
2:求上下界会不统一
mid=l + (r-l)/2通分后和上面式子是一样的,但是不会超出[].length的范围

浙公网安备 33010602011771号