二分查找

作者: 小鱼嘻嘻 | 来源:发表于2017-09-01 23:08 被阅读13次

    二分查找算法思想

    二分查找顾名思义就是分成两半查找,但是这个查找需要有一个前提是:这个数组必须是有序的,具体实现:二分之后的数与要查找的数比较如果相等直接返回;如果大于要查找的数,就在小的那部分查找;如果小于要查找的数就在大的那部分查找。

    二分查找算法实现

     public static void main(String[] args) {
            int[] arr = {-2, 1, 33, 4, 5, 0, 0, -1, 45, 908, 3};
    
            //先排序
            int[] insertSort = InsertSort.insertSort(arr);
    
            //二分查询
            int result1 = binarySearch(insertSort, 5);
            int result2 = binarySearchTwo(insertSort, 0, insertSort.length, 5);
            System.out.println(result1 == result2);
        }
    
        /**
         * 二分查找【非递归实现】
         *
         * @param insertSort 排完序的数组
         * @param key        需要查找的key
         * @return
         */
        private static int binarySearch(int[] insertSort, int key) {
            if (insertSort.length == 0) return -1;
            int low = 0;
            int high = insertSort.length - 1;
            while (low <= high) {
                int mid = (high + low) / 2;
                if (insertSort[mid] == key) {
                    return mid;
                } else if (insertSort[mid] < key) {
                    low = mid + 1;
                } else {
                    high = mid - 1;
                }
            }
            return -1;
        }
    
    
        /**
         * 二分查找【递归实现】
         *
         * @param insertSort 排完序的数组
         * @param key        需要查找的key
         * @return
         */
        private static int binarySearchTwo(int[] insertSort, int low, int high, int key) {
            if (low > high) return -1;
            int mid = (high + low) / 2;
            if (insertSort[mid] == key) return mid;
            else if (insertSort[mid] < key) {
                return binarySearchTwo(insertSort, mid + 1, high, key);
            } else {
                return binarySearchTwo(insertSort, low, mid - 1, key);
            }
        }
    

    递归和非递归的实现代码都贴出来了,整体来说思想还是比较简单,想看完成版源码请点击:二分查找

    相关文章

      网友评论

        本文标题:二分查找

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