zoukankan      html  css  js  c++  java
  • 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;
        }
    
    }
    
    
  • 相关阅读:
    第05组 Beta版本演示
    第05组 Beta冲刺(4/4)
    第05组 Beta冲刺(3/4)
    RogrePirates Scrum Meeting 博客汇总
    Beta阶段事后分析
    Beta阶段项目展示
    Beta阶段发布说明
    Beta阶段测试报告
    Beta阶段第十次会议
    Beta阶段第九次会议
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/10711705.html
Copyright © 2011-2022 走看看