二分查找:
定义:在一个有序的数组内(重要点),目标值每次与数组的中间值作比较,当目标值大于中间值时,再与中间值到末尾的右边比较,反之,与左边比较。
分析:我能从定义中可以很直观的看到第一个要素,那就是一个有序的数组,其次就是每次与中间值进行比较,且大于就与右边比,小于就与左边比。
public static int sorting(int[] arr,int target) {
int start = 0;
int end = arr.length -1;
while(start <= end) {
int middle = (start + end)/2;
if (arr[middle] > target) {
end = middle - 1;
}else if(arr[middle] < target){
start = middle + 1;
}else {
return middle;
}
}
return -1;
}
重点二:就是我们进行一次比较后,在重新给end或是start赋值时,要每次都多一位,因为当我们的target的值是数组第一个或是最后一个时,会出现死循环,这是因为,这时的start == 0,而end == 1;或者start == arr.length - 2;和end == arr.length - 1;当我们再一次进入while循环判断时,(0+1)/2 == 0 或者 (arr.length - 2 + arr.length - 1)/ 2 == arr.length - 2;我们end和start不会因为新的赋值而改变,所以start <= end 的条件永远成立。