二分法查找

二分查找是一种算法,其输入是一个有序的元素列表,而且列表必须是有序的。算法原理就是每次获取列表中间元素进行比较,每次排除一半的元素。
比如100个元素使用二分查找是:
100—50—25—13—7—4—2—1 只需要查找7次
而使用简单查找时候:
1–2–3–4……96–97–98–99-100 需要查找100次
注:算法都是按照最差情况计算
看看二分法的java代码:

 /**
     * @param list 查找集合
     * @param item 查找目标
     * @return 是否查找成功,-1为未查到;其他值为查找成功列表位置
     */
    public static int isInclude(Integer[] list, int item) {
        int low = 0;
        int high = list.length - 1;
        int time = 0;
        while (low <= high) {
            time = time+1;
            System.out.print("次数="+time);
            //整数类型默认取下整
            //中间位置 = (左边界+右边界)/2
            int mid = (low + high) / 2;
            int guess = list[mid];

            if(guess == item){
                //找到元素
                return mid;
            }
            if(guess > item){
                //数字比目标大了
                high = mid - 1;
            }else {
                low = mid + 1;
            }
        }
        return -1;
    }

算法规则:二分法查找会每次排除一半的元素,直到找到最后一个。比如:8–>4–>2–>1需要查找3次,16–>8–>4–>2–>1需要查找4次,依次类推发现,二分法查找的n个元素的列表,最多需要log2n步(n相对于2的对数,不为整数采用进一法),而简单查找最多需要n步。


算法时间:大O表示法,指算法在最糟糕的情况下所需要的步数
O(log2n):二分法查找 对数时间
O(n):简单查找 线性时间
O(n * log2 n):快速排序
O(n ^2 ): 选择排序
O(n!):旅行商问题 阶乘时间

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值