二分查找(非递归)详解

二分查找(非递归)详解

说明

  1. 二分查找具有很高的查找效率,但是要求要查找的数组必须是有序的,如果是无序的,在查找前必须对其进行排序,否则会出问题
  2. 二分查找采用折半查找的思路,时间复杂度为对数阶,每次都判断要查找的值和数组中间值的大小关系
  3. 如果数组中间值元素等于要查找的值,说明找到,直接返回
  4. 如果中间值大于目标值,说明要查找的元素在中间值的左边,重置右索引
  5. 否则要查找的目标值在中间元素的右边,重置左侧索引
  6. 如果查找完还没有找到,说明没有要查找的值,返回-1
  7. 二分查找较简单,但很常用,需熟练
  8. 源码见下

源码及分析

/**
     * 使用非递归的形式实现二分查找
     * @param arr 要查找的数组
     * @param target 要查找的目标值
     * @return 返回查找的结果
     */
    public static int binarySearchNoRecursion(int[] arr, int target){
        //定义左右指针
        int left = 0, right = arr.length - 1;
        //循环查找
        while (left <= right){
            //定义中间值索引
            int mid = (left + right) / 2;
            //如果中间值等于target
            if (arr[mid] == target){
                return mid;
                //否则重置左右指针
            }else if (arr[mid] > target){
                right = mid - 1;
            }else {
                left = mid + 1;
            }
        }
        //如果没找到返回-1
        return -1;
    }
posted @ 2021-06-13 20:40  mx_info  阅读(149)  评论(0)    收藏  举报