java 二分查找
Posted DQ_CODING
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 二分查找相关的知识,希望对你有一定的参考价值。
注意
二分查找要求原数组为有序序列,从小到大
递归解法
public class problem9
public static void main(String[] args)
int[] arr = 1,2,3,4,6,7;
int left = 0;
int right = arr.length - 1;
int value = 2;
System.out.println(Arrays.toString(arr));
int index = binary(arr, left, right, value);
System.out.println(index);
//递归解法
public static int binary(int[] arr, int left, int right, int value)
if (left > right)
//没有找到就返回-1
return -1;
//中间数的下标
/*1.(left+right)/2
* 2.(left + right) >>> 1:无符号右移1,相当于除以2
* */
int midIndex=(left + right) >>> 1;
//中间数
int middle = arr[midIndex];
if (value > middle)
//如果比中间数大,就从中间数的右边进行查找
return binary(arr, middle + 1, right, value);
else if (value < middle)
//如果比中间数小,就从中间数的左边进行查找
return binary(arr, left, middle - 1, value);
else
//等于中间数,直接返回下标
return midIndex;
非递归解法
public class problem9_1
public static void main(String[] args)
int[] arr = 1,2,3,4,6,7;
int left = 0;
int right = arr.length - 1;
int value = 2;
System.out.println(Arrays.toString(arr));
int index = binary(arr, left, right, value);
System.out.println(index);
//非递归解法
public static int binary(int[] arr, int left, int right, int value)
while (left<=right)
int midIndex=(left+right)>>>1;
int middle=arr[midIndex];
if (value>middle)
left=midIndex+1;
else if (value<middle)
right=midIndex-1;
else
return midIndex;
return -1;
以上是关于java 二分查找的主要内容,如果未能解决你的问题,请参考以下文章