Java实现 二分查找
/**
* 使用二分查找的方式查询指定的值
* @author ZhangYu
* @data 2010-01-23
*/
public class BinSearch {
/**
* 用递归实现二分查找
* @param data -被查找的数组
* @param value -要查找的值
* @param left -查找范围的最小值
* @param right -查找范围的最大值
* @return 返回查找的下标,没有查找的值返回-1
*/
public int search(int[] data ,int value ,int left ,int right){
int mid = (right-left)/2 + left; //当前比较值的下标
/*
* 退出条件
*/
if(left > right){
return -1;
}
if(value == data[mid]){
return mid;
}else if(value > data[mid]){
return search(data ,value ,mid +1 ,right); //设置新的最小范围
}else if(value < data[mid]){
return search(data, value, left, mid - 1); //设置新的最大范围
}
return -1;
}
/**
* 有循环的方式实现二分查找
* @param data -被查找的对像
* @param value -要查找的值
* @return 返回查找的下标,没有查找的值返回-1
*/
public int search(int []data ,int value){
int left = 0; //查找范围的最小值
int right = data.length - 1; //查找范围的最大值
while(left <= right){
int mid = (right-left)/2 + left; //当前比较值的下标
if(value == data[mid]){
return mid;
}else if(value > data[mid]){
left = mid+1; //设置新的最小范围
}else if(value < data[mid]){
right = mid-1; //设置新的最大范围
}
}
return -1;
}
public static void main(String []args){
BinSearch bs = new BinSearch();
int [] data = {1,5,7,9,15,16,20,25,28,30,38};
System.out.println(bs.search(data, 5, 0, data.length-1));
System.out.println(bs.search(data, 7));
}
}
相关文档:
我今天学习了sql语句的常用函数,是冯威老师讲的,我做了简单的笔记:
一,SQL函数:
1. 大小写转换函数
lower 转成小写
upper 大写
initcap 将字符串的(每个单词的)第一个字母变为大写,后面的小写
select initcap('huangHY') from dual
&n ......
及时消除不使用的对象的引用, 理论上, 带有内存管理的语言是不存在内存泄漏的, 但是如果对对象的操作不当,也是可能会造成内存泄漏. 如有一个stack, 其pop函数如下. public Object pop() { if( Element.length() == 0) return nu ......
1. doGet vs doPost
这个问题,老师讲得不是很清晰,仅仅讲了doGet是可以取出参数值在url中的参数。以下内容copy自网络:
“get只有一个流,参数附加在url后,地址行显示要传送的信息,大小个数有严格限制且只能是字符串。
post的参数是通过另外的流传递的, 不通过url,所以可以很大,也可以传 ......