二分查找算法

Posted 奔跑的路奇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找算法相关的知识,希望对你有一定的参考价值。

二分查找算法

二分查找算法

二分查找的前提是该数组是有序的

二分查找的思路分析:

  1. 首先确定该数组的中间的下标 mid = (left + right) / 2;
  2. 然后让需要查找的数findValue和arr[mid]比较
  3. 如果findValue>arr[mid],则说明你要查找的数在mid的右边,因此需要递归的向右查找
  4. 如果findValue<arr[mid],则说明你要查找的数在mid的左边,因此需要递归的向左查找
  5. 如果findValue==arr[mid],则说明你要查找的数找到了,就返回
/**
 * 二分查找的前提是该数组是有序的
 */
public class BinarySearch 

	 int arr[] = 1,4,5,7,100,185;
	 int i = binarySearch(arr, 0, arr.length - 1, 185);
     System.out.println("索引为:"+i);


    /**
     *
     * @param arr:数组
     * @param left:左边的索引
     * @param right:右边的索引
     * @param findVal:要查找的值
     * @return
     */
    public static int binarySearch(int[] arr,int left,int right,int findVal)

        //当left > right时 ,说明递归整个数组完了也没有找到
        if (left > right)
            return -1;
        

		//中间的索引
        int mid = (left + right) / 2;
        //中间值
        int midVal = arr[mid];

        if (findVal > midVal)
            //向右递归
            return binarySearch(arr, mid+1 , right, findVal);
        else if (findVal < midVal)
            //向左递归
            return binarySearch(arr, left, mid-1, findVal);
        else 
            return mid;//找到了
        
    


以上是关于二分查找算法的主要内容,如果未能解决你的问题,请参考以下文章

查找算法之“二分查找”

二分算法(java超详细)

Go-二分查找算法

每周算法小知识之二分查找

算法_001_二分查找算法

基础算法-二分查找