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));
}
}
相关文档:
public class Bean1 {
private String strValue;
private int intValue;
private List listValue;
private Set setValue;
private String[] arrayValue;
private Map mapValue;
public String getStrValue() {
return strValue;
}
public void setStrValue(String strValue) {
t ......
二分查找法和线性查找法
二分查找法是一种比普通线性查找快得多的查找算法,但只适用于有序集合当中。拿升序排序后的整型数组来说,二分法具体的实现原理是:先把待查找数a与数组中间的那个数x对比,如果相等,直接返回x的索引;如果a大于x,则排除掉数组的前面一半(包括x),接着拿a与剩下一半数组中间的那个数x对比,如 ......
JAVA是强类型的语言。当引用对象的时候,如果是上溯的话,需要强制转换。如你上面写的,
PiePlot p = (PiePlot)Plot,这就是上溯,生成实例时引用的是父类,需要强制转换,所以就需要加个(PiePlot)来声明Plot(Plot是父类)。 ......
/* 高手之作,本人谨以收藏者身份拿出共享供大家参考! */
/*
* 向量接口
*/
package dsa;
public interface Vector {
//返回向量中元素数目
public int getSize();
//判断向量是否为空
public boolean isEmpty();
//取秩为r的元素
public Object getAtRank(int r)
throws ......