二分查找,是从一个有序的数组里,快速找到目标值所在索引位置。
那怎么得到一个有序的数组?得用一些排序算法。下篇再写。
李咏的那个猜价格游戏,高了,低了,如果用二分查找法,应该是比较靠谱的。。
比如,他说产品价格在1-100之间。如果你上来直接说,50,就比90赢的概率要大一些。
int[] arr = new int[]{1,2,3,4,5};
//二分查找
int head = 0 ;
int end = arr.length-1;
int target = 3;
while (head<=end){
int mid = (head+end) / 2;
if(arr[mid] == target){
System.out.println("找到");
System.out.println("索引值"+mid);
break;
} else if (arr[mid] > target) {
end = mid -1;
}else {
head = mid +1 ;
}
}
二分查找思想是,根据开始和数组结束,取中间值,然后和目标值比较。
如果中间值比目标值大,说明目标值在左边。那么就把右边结尾的范围收缩一下,中间值以及其右边的都不用看了。
反之,如果中间值比目标值小,说明目标值在右边。那么就把左边开始的范围往右挪一下。