美文网首页
java二分查找

java二分查找

作者: 何甜甜在吗 | 来源:发表于2018-02-28 23:26 被阅读0次

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

    两种实现方式
    1.递归二分查找

    public class BinarySearch {
        public static void main(String[] args) {
            int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9};
            int result = search(a, 0, a.length - 1, 10);
            System.out.println(String.format("position:%d", result));
        }
    
        /**
         * 递归二分查找实现
         * @param a 查找的有序序列
         * @param left 左边界
         * @param right 右边界
         * @param key 查找的值
         * @return
         * */
        private static int search(int[] a, int left, int right, int key) {
            if (left > right) {
                return -1;
            }
    
            int mid = (left + right) / 2;
            if (a[mid] > key) {
               return search(a, left, mid - 1, key);
            }
    
            if (a[mid] < key) {
                return search(a, mid + 1, right, key);
            }
    
            return mid;
    
        }
    }
    

    2.迭代二分查找

    public class BinarySearch2 {
        public static void main(String[] args) {
            int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9};
            int result = search(a, 0, a.length - 1, 5);
            System.out.println(String.format("position:%d", result));
        }
    
        /**
         * 递归二分查找实现
         * @param a 查找的有序序列
         * @param left 左边界
         * @param right 右边界
         * @param key 查找的值
         * @return
         * */
        private static int search(int[] a, int left, int right, int key) {
            while (left <= right) {
                int mid = (left + right) / 2;
    
                if (a[mid] == key) {
                    return mid;
                } else if (a[mid] > key) {
                    right = mid - 1;
                } else {
                    left = mid + 1;
                }
    
            }
    
            return -1;
        }
    }
    

    二分查找比较次数少,查找速度快,平均性能好,但是要求为有序序列

    相关文章

      网友评论

          本文标题:java二分查找

          本文链接:https://www.haomeiwen.com/subject/mkrwxftx.html