算法学习之二分法

二分查找法:

二分查找的核心一是输入为有序数组,只有当输入时有序数组时,二分查找才管用;而是核心算法就是从数组的中间开始查找,定义数组的low和high,分别是0和数组的长度减一,然后从中间开始比较,如果大了,则更新high,小了话则更新low,这样的话每次都能去除掉一半的数。二分查找的运行时间为\log 2^{n},也就是2的对数,比如8个数,3次就可以找到,16个数,4次就可以找到,当数越大时,节约的时间越多。

题目:

输入一行有序数组,和一个目标数字,使用二分法查找有序数组中是否存在该目标数字,存在时输出查找次数和序号,如果找不到则输出查找次数以及未找到对应的数

package com.dlh.test;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class 二分法 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] string = sc.nextLine().split(" ");
        int item = sc.nextInt();
        int low = 0;
        int high = string.length - 1;
        int count = 0;
        boolean find = false;
        while (low <= high){
            int mid = (low + high)/2;
            int guess = Integer.parseInt(string[mid]);
            count++;
            if (guess == item){
                find = true;
                System.out.println("查找次数"+count+","+"找到序号"+ mid);
                break;
            }else if (guess > item){
                high = mid - 1;
            }else {
                low = mid + 1;
            }
        }
        if (!find){
            System.out.println("找了"+count+"次,"+"未找到对应的数");
        }
    }
}

相关推荐

  1. 算法——二分法

    2024-07-20 23:50:04       21 阅读
  2. 搜索算法系列二(二分查找)

    2024-07-20 23:50:04       29 阅读
  3. 算法学习笔记(二分图染色)

    2024-07-20 23:50:04       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 23:50:04       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 23:50:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 23:50:04       45 阅读
  4. Python语言-面向对象

    2024-07-20 23:50:04       55 阅读

热门阅读

  1. C语言经典例题-5

    2024-07-20 23:50:04       22 阅读
  2. 【面试题】Golang 锁的相关问题(第七篇)

    2024-07-20 23:50:04       17 阅读
  3. Perl编程艺术:探索代码重用的无限可能

    2024-07-20 23:50:04       11 阅读
  4. Python 基础——列表(list)

    2024-07-20 23:50:04       17 阅读
  5. jvm-证明cpu指令是乱序执行的案例

    2024-07-20 23:50:04       21 阅读