java 实现二分查找法

package offer08;
/**
 * 二分查找,适合已经排好序的数组
 * 【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
 * @author tcj
 *
 */
public class BinarySearch {
	
	//a是一个已经排好序的数组,这里假设为升序
	//递归实现
	public static int search(int x,int[] a,int start,int end){
		int middle = (end+start)/2;
		if(x < a[start] || x > a[end] || start > end){
			return -1;
		}
		if(x < a[middle]){
			return search(x,a,start,middle-1);
		}else if(x == a[middle]){
			return middle;
		}
		else{
			return search(x,a,middle+1,end);
		}
	}
	
	//循环实现
	public static int search02(int x,int[] a){
		int low = 0;
		int high = a.length - 1;
		while(low <= high){
			int middle = (high + low)/2;
			if(x == a[middle]){
				return middle;
			}else if(x < a[middle]){
				high = middle - 1;
			}else{
				low = middle + 1;
			}
		}
		return -1;
	}
	public static void main(String[] args){
		int[] a = {1,2,3,4,5};
		System.out.println(search(2,a,0,4));
		//测试非递归
		System.out.println(search02(5,a));
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值