前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重温二分查找算法(r4笔记第66天)

重温二分查找算法(r4笔记第66天)

作者头像
jeanron100
发布2018-03-15 16:02:18
6500
发布2018-03-15 16:02:18
举报

二分查找在学习算法的时候会涉及到,算是一个基本的分治思想,对于算法的实现大家也都是很熟悉的,但是这个时候真会犯眼高手低的毛病。不信你自己试试,看你能够在段时间内写出可运行的二分查找算法。 二分查找算法的思想非常易于理解,但是能够写出一个准确的二分查找程序绝非一个很简单的事情,从历史上来看,而非思想早在1946年就出现了,但是第一个完全正确的二分查找算法确实在1962年出现,计算机专家曾说过,90%以上的计算机专家不能再2个小时内写出完全正确的二分查找算法。我反正是应了这句话,不过我不是计算机专家。 我们来看一个比较标准的二分查找算法

代码语言:javascript
复制
package new_test;


public class BinarySearch {
int arr[];
public static void main(String args[]){
test();
}
public int binarySearch(int t,int[] arr){
int left=0;
int right=arr.length;
int middle;
while(left<=right){
middle=(left+right)/2;

if(t==arr[middle]){
return middle;
}
if(t>arr[middle]){
left=middle+1;
}
if(t<arr[middle]){
right=middle-1;
}
}
return -1;

}

public static void test(){
int[] arr=new int[]{1,2,5,7,8,10,11,15,19,20};
System.out.println(	new BinarySearch().binarySearch(8, arr));
}
}

运行结果是4,即arr[4]=8 其实这个算法还有一些值得思考的细节。比如求得两个数之和的平均数 如果直接写为middle=(left+right)/2就很可能出现数值溢出的情况。 可以使用下面的形式来避免,算法博大精深,细节决定成败。 middle=left+(right-left)/2;

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档