二分查找
- public static int binSearch(int srcArray[], int key) {
- int mid;
- int start = 0;
- int end = srcArray.length - 1;
- while (start <= end) {
- mid = (end - start) / 2 + start;
- if (key < srcArray[mid]) {
- end = mid - 1;
- } else if (key > srcArray[mid]) {
- start = mid + 1;
- } else {
- return mid;
- }
- }
- return -1;
- }
注:为什么不用mid=(start+end)/2;而用mid=(end-start)/2+start;
因为对于一个规模足够大的数组(极端假设为2147483647个元素),那么在对后半部(2/n~n)取mid时,使用mid = (end + start) / 2溢出(结果会得到一个负数)
此时你用arr[mid]则会报错。