复习之二分查找

二分查找又称折半查找

前提条件: 1  采用顺序存储结构 ;2  待查找序列是有序的

如果待查找序列是有序的,则二分查找是最好的查找算法。


不多说,上代码微笑


普通实现

package com.lyj.search;

public class BinarySearch {

    /**
     * @param args
     */
    public static void main(String[] args) {
        int[] array = { 1, 4, 12, 17, 20, 25, 34, 40 };

        int index = normalBinarySearch(array, 25);
        System.out.println("index: " + index);
    }

    private static int normalBinarySearch(int[] array, int target) {
        // 确定上下界
        int lower = 0;
        int upper = array.length - 1;

        while (lower <= upper) {
            // 确定中间位置
            int mid = (lower + upper) / 2;

            if (target == array[mid]) {
                return mid;
            } else if (target < array[mid]) {
                upper = mid - 1;
            } else {
                lower = mid + 1;
            }
        }

        // 没有目标值返回-1
        return -1;
    }
}



递归实现

package com.lyj.search;

public class BinarySearch {

    /**
     * @param args
     */
    public static void main(String[] args) {
        int[] array = { 1, 4, 12, 17, 20, 25, 34, 40 };

        int index = recursionBinarySearch(array, 0, array.length - 1, 25);
        System.out.println("index: " + index);
    }

    private static int recursionBinarySearch(int[] array, int lower, int upper, int target) {
        if (lower <= upper) {
            int mid = (lower + upper) / 2;

            if (target == array[mid]) {
                return mid;
            } else if (target < array[mid]) {
                return recursionBinarySearch(array, lower, mid - 1, target); // 这里要return
            } else {
                return recursionBinarySearch(array, mid + 1, upper, target); // 这里要return
            }
        }

        return -1;
    }

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值