• 技术文章 >java >java数组

    java二分查找的原理实现

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

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

    1.二分查找步骤描述

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

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

    若相等,则查找成功

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

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

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

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

    2.要求

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

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

    3.实例

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    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学习网