Java查找算法:二分查找

Posted 解说编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java查找算法:二分查找相关的知识,希望对你有一定的参考价值。

什么是二分查找?

假设你登陆qq,当你这样做时,服务器必须核实你是否有其软件的账户,所以说就必须在数据库查找你的用户名。如果你的用户名为yaka,qq后台可以从A开始查找,直到找到你的名字

那有没有更便捷的方法,更加合乎逻辑的做法是从中间开始查找,这就是二分查找  

  • 二分查找的速度比简单查找快得多

  • O(log n)比 O(n)快。需要搜索的元素越多,前者比后者就快得越多

  • 算法的运行时间并不以秒为时间单位

  • 算法运行时间是从增速的角度度量的

假设检查一个元素需要1毫秒。使用简单查找时,必须检查100个元
素,因此需要100毫秒才能查找完毕。而使用二分查找时,只需检查7个
元素(log 2 100大约为7),因此需要7毫秒就能查找完毕。然而,实际
要查找的列表可能包含10亿个元素,在这种情况下,简单查找需要多长
时间呢?二分查找又需要多长时间呢?

也就是说,随着元素数量的增加,二分查找需要的额外时间并不多,而
简单查找需要的额外时间却很多。因此,随着列表的增长,二分查找的
速度比简单查找快得多

举个简单的例子

 1package com.jyh.arithmetic.firstchapter;
2
3public class test {
4    int number=0;
5    public int binary_list(int[] list,int item){        
6        int low=0;
7        int high=list.length-1;
8        while (low<=high) {     //只要范围没有缩小到一个元素
9            int mid=(high+low)/2;     //中间位置
10            int midvalue=list[mid];      //中值
11            if(midvalue==item){       //等于中值直接返回
12                number++;
13                return mid;
14            }else if (midvalue>item) {
15                high=mid-1;
16            }else if (midvalue<item) {
17                low=mid+1;
18            }else {
19                System.out.println("没有找到");
20                break;
21            }
22            number++;
23        }
24        return -1;
25    }
26    public static void main(String[] args) {
27        test ff=new test();
28        int[] a={1,2,3,4,5};
29        int i=ff.binary_list(a,5);
30        System.out.println("查询结果"+i);
31        System.out.println("查询次数"+ff.number);
32    }
33}

运行结果:

   查询结果4

   查询次数3



   



以上是关于Java查找算法:二分查找的主要内容,如果未能解决你的问题,请参考以下文章

java泛型 二分查找

[Algorithm]二分插值斐波那契查找算法 Java 代码实现

[Algorithm]二分插值斐波那契查找算法 Java 代码实现

Java学习之二分查找算法

Java八股文面试题 基础篇 -- 二分查找算法冒泡排序选择排序插入排序希尔排序快速排序

Java八股文面试题 基础篇 -- 二分查找算法冒泡排序选择排序插入排序希尔排序快速排序