public int binarySearch(int[] a, int key) {
int low = 0;//数组的下标从0开始
int high = a.length - 1;//数组的最后一个数的下标是数组长度减1
int mid;//定义中间量
while (low <= high) {//注意是 <= 不是 < ,因为可能当low=high的时候命中,比如1,2,3
mid = (low + high) / 2;//每次从数组的中间判断
if (key == a[mid]) {//如果命中
return mid;
} else if (a[mid] < key) {//如果中间值 小于 要查找的值
low = mid + 1;//low不是变成mid,因为a[mid]不是要查找的值
} else if (key < a[mid]) {//如果要查找的值 小于 中间值
high = mid - 1;
}
}
return -1;//没找到,返回-1
}
这个算法很多同学会担心数组是单数还是双数,其实不用担心,
如果是单数的话,mid就等于中间位置,
如果是双数的话,mid就等于中间位置往左一个,
而且low和high也可能重合,即只有一个数的时候,
二分查找可以节省很多时间,但是数组必须是有序的,
第一次查找,mid = 4;
第一次查找,mid = 1;
第一次查找,mid = 2;