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));
}
}
相关文档:
/*
* @(#)MemoryMonitor.java 1.3 05/11/17
*
* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are ......
maven 相信很多人都用到听过,用的人应该不是很多,至少我们公司1000人级别的IT部门都没用。
复杂程度决定工具的使用情况,刚入门的程序员如果没有一种良好的学习心态看了肯定会对ant有点抱怨(使得你不能很快在ec上看到结果)。况且不说maven做的好不好,起码能给大型项目的管理提供一种新的思路。自动化能减少很多时间和交 ......
1 package 和 import的作用是分割全局命名空间,保证我们不会遇到名字的冲突。
2 java解释器的工作程序:
(1) 首先它找到环境变量CLASSPATH , CLASSPATH包含一个或多个目录,它们作为一个特殊的根使用,从这里展开对.class文件的搜索,
从那个根开始,解释器会寻找包名,并将它们每一个点号 ......
/* 高手之作,本人谨以收藏者身份拿出共享供大家参考! */
/*
* 向量接口
*/
package dsa;
public interface Vector {
//返回向量中元素数目
public int getSize();
//判断向量是否为空
public boolean isEmpty();
//取秩为r的元素
public Object getAtRank(int r)
throws ......