7-1二分查找

二分查找


基本思想

image-20210608235406515

一半一半 逐渐逼近

思路

二分查找的思路分析

  1. 首先确定该数组的中间的下标
    mid= (left + right)/ 2

  2. 然后让需要查找的数findVal和arr[mid]比较
    2.1 findVal>arr[mid], 说明你要查找的数在mid的右边,因此需要递归的向右查找
    2.2 findVal <arr[mid],说明你要查找的数在mid的左边,因此需要递归的向左查找
    2.3 findVal == arr[mid]说明找到,就返回

//什么时候我们需要结束递归.
1)找到就结束递归
2)递归完整个数组,仍然没有找到findVal,也需要结束递归

实现代码

迭代方式

package com.company.search;

/**
 * @Function :
 * date 2021/5/17 - 13:20
 * How :
 */
public class BinSearch {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8,9};
        int index = binSearch(arr, 8)+1;
        System.out.println(index);

    }
    public static int binSearch(int srcArray[], int key) {
        int mid;
        int start = 0;
        int end = srcArray.length - 1;

        while (start <= end) {
            mid = (end - start) / 2 + start;
            if (key == srcArray[mid]){
                return mid;
            }
            if (key < srcArray[mid]) {
                end = mid - 1;
            }
            if (key > srcArray[mid]) {
                start = mid + 1;
            }
        }
        return -1;
    }
}

递归方式

public static int binSearch2(int [] arr, int key,int start,int end){
        int mid = (end - start) / 2 + start;
        if (key==arr[mid]){
            return mid+1;
        }
        if (key < arr[mid]) {
            return binSearch2(arr,key,start,mid-1);
        }
        if (key > arr[mid]) {
            return binSearch2(arr,key,start+1,end);
        }
    return -1;
    }

后记

没有处理越界情况

posted @ 2021-11-23 21:15  剪水行舟  阅读(122)  评论(0)    收藏  举报