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));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值