二分查找之java

原创 2015年07月09日 22:01:48

简述:
二分查找又称折半查找。优点是比较次数少,查找速度快,平均性能好。
缺点是要求待查表为有序表,因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
思想:
二分查找的基本思想是将n个元素分成大致相等的两部分,用数组array[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止, 如果a[n/2]>x,则只要在数组a的左半部分继续搜索x, 如果x>a[n/2],则只要在数组a的右半部搜索x.

public class BinarySearch {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8};
        //该数组必须是有序的
        int index = search(array, 8);
        System.out.println(index);
    }

    static int search(int[] number, int target) {
        int low = 0;
        int upper = number.length - 1;
        // 增加low或者减少upper,直到找到元素
        while (low <= upper) {
            int mid = (low + upper) / 2;
            // 判断target的位置
            if (target == number[mid]) {
                return mid;
            } else if (target < number[mid]) {
                upper = mid - 1;
            } else if (target > number[mid]) {
                low = mid + 1;
            }
        }
        //找不到后返回-1
        return -1;
    }
}

时间复杂度分析
二分查找最好情况无疑就是可以一次找到元素,时间复杂度是o(1)。
那我们来分析最坏情况,其实最主要就是循环的次数,假如有4个元素,最坏情况就需要经过三次循环才能找到元素,设n为元素个数,x就是循环的次数,一直在长度为n, n/2, n/4 ,…. n/2^(x-1)的数组中找元素,当长度等于1时找到元素,所以令n/2^(x-1)等于1,这时找到元素,取log后可得x=log2n +1,所以时间复杂度就是o(log2n)

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java版 二分查找

一、算法介绍 折半查找(搜索)、二分查找(搜索)           已经排序的数据(假如是从左向右依次递增),取出中间数与查找值比较      如果中间值大于查找值,应该再次向左侧查找,因为左侧都...
  • love_world_
  • love_world_
  • 2014年01月05日 14:09
  • 1599

JAVA实现二分查找

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表...
  • lvwei1990
  • lvwei1990
  • 2015年07月20日 21:34
  • 1413

二分查找算法(递归与非递归两种方式)

首先说说二分查找法。 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标。 采用非递归方式完成二分查找法。java代码如...
  • lovesummerforever
  • lovesummerforever
  • 2014年04月27日 15:44
  • 85343

java 实现折半(二分)查找

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。 首先,假设表中元素是按升序...
  • yxmmao
  • yxmmao
  • 2016年06月05日 20:51
  • 969

JAVA实现冒泡排序和二分查找

冒泡排序     冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有...
  • dreamsunday
  • dreamsunday
  • 2016年07月21日 10:46
  • 6580

Java实现二分查找算法(元素可重复)

public class BinarySearch { public static void main(String[] args) { int[] arrays = new int[]{1,2...
  • wbb_1216
  • wbb_1216
  • 2017年03月01日 14:52
  • 1200

JDK中的二分查找算法

二分查找算法是在一个有序(升序)的数据集中以集合里位于中间位置的值为基准来与要查找的值做比较,如此则把集合分为了两部分,一部分是从集合的起始位置到中间位置的前一个位置,所有的值都比中间位置的值小,另外...
  • hugh282003
  • hugh282003
  • 2014年01月11日 23:58
  • 1153

算法入门---java语言实现的二分搜索树小结

图片均来自慕课网,仅仅为了学习记录。 1、二叉查找树(Binary Search Tree)      也可叫做二分查找树。它不仅可以查找数据,还可以高效地插入、删除数据。      特...
  • zy00000000001
  • zy00000000001
  • 2017年04月08日 12:32
  • 764

二分查找算法及其变种

前言二分查找算法也称为折半查找算法,是一种在查找算法中普遍使用的算法。其算法的基本思想是:在有序表中,取中间的记录作为比较关键字,若给定值与中间记录的关键字相等,则查找成功;若给定的值小于中间记录的关...
  • u011116672
  • u011116672
  • 2015年12月06日 16:43
  • 2411

二分查找过程、比较次数分析、java实现

二分查找过程二分查找,也称折半查找,是对有序序列的查找算法,时间复杂度为O(log n).本文的重点是某元素二分查找的比较次数。特别要注意的是查找的上下边界问题(下面有解释)例:22 34 55 77...
  • joson793847469
  • joson793847469
  • 2016年09月12日 14:26
  • 1250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二分查找之java
举报原因:
原因补充:

(最多只允许输入30个字)