• 技术文章 >java >java数组

    java二分查找的原理实现

    小妮浅浅小妮浅浅2021-02-26 10:08:12原创4634

    本教程操作环境:windows7系统、java10版,DELL G3电脑。

    1.二分查找步骤描述

    (1)首先确定整个查找区间的中间位置 mid = ( left + right )/ 2

    (2)用待查关键字值与中间位置的关键字值进行比较;

    若相等,则查找成功

    若大于,则在后(右)半个区域继续进行折半查找

    若小于,则在前(左)半个区域继续进行折半查找

    (3)对确定的缩小区域再按折半公式,重复上述步骤。

    最后,得到结果:要么查找成功, 要么查找失败。折半查找的存储结构采用一维数组存放。 折半查找算法举例

    2.要求

    (1)必须采用顺序存储结构。

    (2)必须按关键字大小有序排列。

    3.实例

    public class Demo {
     
        public static void main(String[] args) {
            int[] arr={-1,0,3,5,9,12};//查找的数组
            int searchNum=13;//查找的目标数
            Arrays.sort(arr);
     
            int resultOne=binarySearchOne(arr,searchNum,0,arr.length-1);
            System.out.println(resultOne);
     
            int resultTwo=binarySearchTwo(arr,searchNum);
            System.out.println(resultTwo);
        }
     
        /**
         * 递归实现
         * @param arr
         * @param searchNum
         * @param start
         * @param end
         * @return
         */
        public static int binarySearchOne(int[] arr,int searchNum,int start,int end){
            if(start>end)
                return -1;
            int middle=(start+end)/2;
            if(searchNum<arr[middle])
                return binarySearchOne(arr,searchNum,start,middle-1);
            else if(searchNum>arr[middle])
                return binarySearchOne(arr,searchNum,middle+1,end);
            else
                return middle;
        }
     
        /**
         * 非递归实现
         * @param arr
         * @param searchNum
         * @return
         */
        private static int binarySearchTwo(int[] arr, int searchNum) {
            int start=0;
            int end=arr.length-1;
            while(start<=end){
                int middle=(start+end)/2;
                if(searchNum<arr[middle])
                    end=middle-1;
                else if(searchNum>arr[middle])
                    start=middle+1;
                else
                    return middle;
            }
            return -1;
        }
    }

    以上就是java二分查找的原理实现,可以看出整个数据分成两部分,然后根据条件筛选再到相应的区域重复执行对半操作。大家在理解完二分查找的原理后,就可以进行实例代码体验了。更多Java学习指路:java数组

    专题推荐:java二分查找原理
    上一篇:java中一维数组常见运算 下一篇:java中斐波那契查找的基本介绍

    相关文章推荐

    • java数组的概念理解• java数组初始化方式

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网