• Java算法 -- 二分查找


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

    通过递归和非递归实现二分查找:

    public class Main {
    
    
        public static void main(String[] args) {
            int[] array = {1, 2, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59};
            int position = biSearch(array, 5);
            int position1 = biSearch(array, 1, array.length - 1, 5);
            System.out.println(position);
            System.out.println(position1);
        }
    
        /**
         * 非递归实现二分查找
         *
         * @param array
         * @param array
         * @return
         */
        public static int biSearch(int array[], int key) {
            int low = 0;
            //总长度
            int high = array.length - 1;
            while (low <= high) {
                //中间位置
                int mid = low + (high - low) / 2;
                //如果中间位置的值大于要查找的内容,从左侧查找
                if (array[mid] > key)
                    high = mid - 1;
                else if (array[mid] < key)
                    //如果中间位置的值小于要查找的内容,从右侧查找
                    low = mid + 1;
                else
                    //等于就返回
                    return mid;
            }
            return -1;
        }
    
    
        /**
         * 递归实现二分查找
         *
         * @param array
         * @param low 从哪个位置开始
         * @param high 到哪个位置结束
         * @param target 要查询的值
         * @return
         */
        public static int biSearch(int array[], int low, int high, int target) {
            if (low > high) return -1;
            //中间位置
            int mid = low + (high - low) / 2;
            //中间位置的值大于要查询的内容,从左侧递归查询
            if (array[mid] > target)
                return biSearch(array, low, mid - 1, target);
            if (array[mid] < target)
                //中间位置的值小于要查询的内容,从右侧递归查询
                return biSearch(array, mid + 1, high, target);
            return mid;
        }
    
    }
    
    
  • 相关阅读:
    正确使用日志的10个技巧
    为什么使用 SLF4J 而不是 Log4J 来做 Java 日志
    将 MyBatis3 的支持添加到 Spring
    Gson 解析教程
    JSON解析工具比较,主要GSON和FastJSON
    高性能JSON框架之FastJson的简单使用
    Overriding managed version XX for YY
    Access restriction 问题解决
    delphi 判断MDI窗体的子窗体是否存在
    delphi 解决RichViewEdit乱码问题
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/10711705.html
Copyright © 2020-2023  润新知