二分查找是一个很快速的查找算法?
前提:
序列必须有序
实现思路:
在一个有序的序列中,先比较目标值 和数组中 最中间的值是否相等,如果不相等 判断是大于该值还是小于,大于则从中间处 和尾部继续 比较 拆分,一次可排除一半的值。
代码实现:
/**
参数依次是:数组,目标值,起始位置,结束位置.
*/
public static int binarySearch(int[] arr, int num, int start, int end){
//获取最中间的值
int mid = (end-start )/2+start;
//校验中间值是否就是目标值,不是则继续截取数组。
if (arr[mid]==num) {
return mid;
}
//校验参数合法性
if (start>=num) {return -1;}
if (num<arr[mid]){ //判断目标值 小于 则从起始位置到 中间位置继续递归
return binarySearch(arr,num,start,mid-1);
}
if (num>arr[mid]){ //判断目标值 大于 则从中间位置到 结束位置继续递归
return binarySearch(arr,num,mid+1,end);
}
return -1;
}
public static void main(String[] args) {
int[] arr = {1,3,5,7,9,11,17,89,82,91,100,101,137,301};
int i = BinarySearchTest.binarySearch(arr, 7, 0, arr.length-1);
System.out.println(i);
}
版权声明:本文为weixin_48773329原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。