java二分查找

二分查找是一个很快速的查找算法?

前提:

序列必须有序

实现思路:

在一个有序的序列中,先比较目标值 和数组中 最中间的值是否相等,如果不相等 判断是大于该值还是小于,大于则从中间处 和尾部继续 比较 拆分,一次可排除一半的值。

代码实现:

/**
		参数依次是:数组,目标值,起始位置,结束位置.

*/
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版权协议,转载请附上原文出处链接和本声明。