java二分法查找

标签: java 二分法 | 发表时间:2012-09-11 23:27 | 作者:
出处:http://www.iteye.com

二 分查找是一种高效率线性表的查找算法。在查找时必须将线性表中的关键字排好序。基本思路是:先确定线性表的中间位置 mid=(first+last)/2;比较所要查找的关键字 key与中间位置的关键字的大小,如果比key和mid.key相等则返回; key比mid.key大(假定为升序)这所要查找的关键字在mid和last之间;否则在first与mid之间。继续按照上面方法查找中间元素,直到 找到为止。
具体实现如下

public class BinarySearch {

public BinarySearch() {
super();
}

/**
* Java二分法查找
* @param a
* @param key
* @return
*/
public static int binarySearch(int[] a, int key) {
if(a.length==0)
return -1;
//开始位置
int first = 0;
//结束位置
int last = a.length-1;
//中间位置
int mid;
//如果开始时,小于则结束.
while(first<=last)
{
mid = (first+last)/2;
//如果等于key,返回这个数在数组中的位置.
if(a[mid]==key)
return mid;
//如果大于key,则在左边.
if(a[mid]>key)
last = mid-1;
//如果小于key,则在右边
if(a[mid]<key)
first = mid+1;
}
return -1;
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a={1,3,4,5,8,7,9,11,15};
System.out.println(binarySearch(a,9));
}

}

 

这样就打印出了所要查找的关键字所在位置的下标。对二分查找求平均查找长度二分查找的过程相当与一棵二叉排序树,所以总节点数为n=2^h- 1,h=Log2 (n+1)。 第i层上的节点数为2^(1-1);在等概率的情况下,平均查找长度ASL=Log2 (n+1)-1。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [java 二分法] 推荐:

java二分法查找

- - ITeye博客
二 分查找是一种高效率线性表的查找算法. 在查找时必须将线性表中的关键字排好序. 基本思路是:先确定线性表的中间位置 mid=(first+last)/2;比较所要查找的关键字 key与中间位置的关键字的大小,如果比key和mid.key相等则返回; key比mid.key大(假定为升序)这所要查找的关键字在mid和last之间;否则在first与mid之间.

Java中的锁(Locks in Java)

- - 并发编程网 - ifeve.com
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一. 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂. 因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字( 译者注:这说的是Java 5之前的情况).

Java PaaS 对决

- 呆瓜 - IBM developerWorks 中国 : 文档库
本文为 Java 开发人员比较了三种主要的 Platform as a Service (PaaS) 产品:Google App Engine for Java、Amazon Elastic Beanstalk 和 CloudBees RUN@Cloud. 它分析了每种服务独特的技术方法、优点以及缺点,而且还讨论了常见的解决方法.

Java浮点数

- d0ngd0ng - 译言-电脑/网络/数码科技
Thomas Wang, 2000年3月. Java浮点数的定义大体上遵守了二进制浮点运算标准(即IEEE 754标准). IEEE 754标准提供了浮点数无穷,负无穷,负零和非数字(Not a number,简称NaN)的定义. 在Java开发方面,这些东西经常被多数程序员混淆. 在本文中,我们将讨论计算这些特殊的浮点数相关的结果.

Qt——转战Java?

- - 博客 - 伯乐在线
编者按:事实上,在跨平台开发方面,Qt仍是最好的工具之一,无可厚非,但Qt目前没有得到任何主流移动操作系统的正式支持. 诺基亚的未来计划,定位非常模糊,这也是令很多第三方开发者感到失望,因此将导致诺基亚屡遭失败的原因. Qt的主要开发者之一Mirko Boehm在博客上强烈讽刺Nokia裁了Qt部门的决定,称其为“绝望之举”,而非“策略变更”.

java 验证码

- - ITeye博客
// 创建字体,字体的大小应该根据图片的高度来定. // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到. // randomCode用于保存随机产生的验证码,以便用户登录后进行验证. // 随机产生codeCount数字的验证码. // 得到随机产生的验证码数字. // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同.

Java异常

- - CSDN博客推荐文章
“好的程序设计语言能够帮助程序员写出好程序,但是无论哪种语言都避免不了程序员写出坏的程序.                                                                                                                          ----《Java编程思想》.

java面试题

- - Java - 编程语言 - ITeye博客
 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面. 抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节. 抽象包括两个方面,一是过程抽象,二是数据抽象.  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法. 对象的一个新类可以从现有的类中派生,这个过程称为类继承.

Java使用memcached

- - 互联网 - ITeye博客
首先到 http://danga.com/memcached下载memcached的windows版本和java客户端jar包,目前最新版本是memcached-1.2.1-win32.zip和java_memcached-release_1.6.zip,分别解压后即可. 然后是安装运行memcached服务器,我们将memcached-1.2.1-win32.zip解压后,进入其目录,然后运行如下命令:c:>;memcached.exe -d install
c:>memcached.exe -l 127.0.0.1 -m 32 -d start.

Java线程池

- - 企业架构 - ITeye博客
线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的. 在jdk1.5之后这一情况有了很大的改观. Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用. 为我们在开发中处理线程的问题提供了非常大的帮助.