zoukankan      html  css  js  c++  java
  • java两种方式实现二分查找

    java两种方式实现二分查找

    1.while循环实现

    2.递归实现

    二分查找是什么?

    ​ 二分查找,又名折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。

    代码演示

    package com.ks.binarysearch;
    /**
     * @author 柯神_
     * @date 2020-12-23 17:00:02
     * @Description 二分查找,又名折半查找
     */
    public class BinarySearch {
        private final static int error = -1;
    
        public static void main(String[] args) {
            /**
             * 1.测试while循环
             */
            int[] a = {1, 2, 4, 9};
            System.out.println("===while循环实现=============");
            System.out.println("key:1,在数组中的位置" + bSearch(a, 1));
            System.out.println("key:2,在数组中的位置" + bSearch(a, 2));
            System.out.println("key:4,在数组中的位置" + bSearch(a, 4));
            System.out.println("key:9,在数组中的位置" + bSearch(a, 9));
    
            /**
             * 2.测试递归
             */
            System.out.println("===递归实现=============");
            System.out.println("key:1,在数组中的位置" + recursionSearch(a, 1, 0, a.length - 1));
            System.out.println("key:2,在数组中的位置" + recursionSearch(a, 2, 0, a.length - 1));
            System.out.println("key:4,在数组中的位置" + recursionSearch(a, 4, 0, a.length - 1));
            System.out.println("key:9,在数组中的位置" + recursionSearch(a, 9, 0, a.length - 1));
        }
    
    
        /**
         * 1.非递归方式
         */
        public static int bSearch(int[] arr, int key) {
            int low = 0;
            int hgt = arr.length - 1;
            int mid = 0;
    
            //优化查询条件
            if (key < arr[0] || key > arr[hgt]) {
                return error;
            }
    
            while (low <= hgt) {
                mid = (low + hgt) / 2;
                if (key < arr[mid]) {
                    hgt = mid - 1;  //向左查找
                }
                if (key > arr[mid]) {
                    low = mid + 1;  //向右查找
                }
                if (key == arr[mid]) {
                    return mid;     //找到返回
                }
            }
            return error;           //找不到返回
        }
    
    
        /**
         * 2.递归
         */
        public static int recursionSearch(int[] arr, int key, int low, int hgt) {
    
            int mid = (low + hgt) / 2;
    
            //优化查询条件
            if (key < arr[low] || key > arr[hgt] || low > hgt) {
                return error;
            }
    
            if (key < arr[mid]) {
                return recursionSearch(arr, key, low, mid - 1);    //向左查找
            }
            if (key > arr[mid]) {
                return recursionSearch(arr, key, mid + 1, hgt);    //向右查找
            }
            if (key == arr[mid]) {
                return mid;                    //找到返回
            }
            return error;                      //找不到返回
        }
    }
    
    

    结果演示

  • 相关阅读:
    modals-methods 模态框 使用说明文档
    jquery validate form 异步提交
    log在线生成器 html中如何设置浏览器中标题前的logo
    解决django关于图片无法显示的问题
    Git远程操作
    Git基本操作
    Git思维导图
    连接GitHub的方法
    Git的三种区域
    Gentoo(贱兔)Linux安装笔记
  • 原文地址:https://www.cnblogs.com/qqkkOvO/p/14180862.html
Copyright © 2011-2022 走看看