Java十大算法之二分查找算法(非递归)


左心房为你撑大大i 提交于 2020-01-14 23:11:26

在前面的排序算法里面博主提到过二分查找算法,是使用递归的方式,下面博主分享一下二分查找算法的非递归方式

1.二分查找算法介绍

二分查找法只适用于从有序的数列中进行查找(比如数字,字母),将数列排序后再进行查找,二分查找法的运行时间为对数时间O(log2n),即查找到需要的目标位置最多只需要log2n步,假设从[0,99]的队列(100个数,即n=100)中寻找目标数30,则需要查找步数为log2 100,即最多查找7次(2^6 < 100 <2^7>)

案例: 数组{1,3,8,10,67,100},编程实现二分查找,要求使用非递归的方式完成

package com.self.tenAlgorithm;

public class BinarySearchNoRecur {
    public static void main(String[] args) {
        int[] arr = {1,3,8,10,67,100};
        int search = binarySearch(arr, 100);
        System.out.println(search);
    }

    /**
     * @param arr  待查找的数组,arr是升序排序的数组
     * @param value  想要查找的值
     * @return  返回对应的下标  如果没有  返回-1
     */
    public static int binarySearch(int[] arr,int value){
        int left = 0;
        int right = arr.length - 1;
        while (left <= right){
            int mid = (left + right) / 2;
            if(arr[mid] == value){
                return mid;
            }else if(arr[mid] > value){
                right = mid - 1;
            }else{
                left = mid + 1;
            }
        }
        return -1;
    }
}

本数组的是升序的数组,如果是降序的数组,代码做出相应的改变,由于二分查找比较简单,博主在这里不多解释

工具导航Map