迭代用在有序数组二分法查找中,递归的二分法查找更简洁,但速度可能会慢一点

 
//把迭代用在有序数组二分法查找中,递归的二分法查找更简洁,但速度可能会慢一点
//分治算法方法中包含两个对自身的递归调用,分别对应于问题的两个部分,在二分法查找中就有两个
//这样的调用,但是只有一个真的执行。调用哪个取决于关键字的值
//后面将会遇到归并排序,她是真正执行了两个递归调用(分成两半的数组分别进行排序)
public class BinarySearchApp {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		OrdArray oa=new OrdArray(20);
		oa.insert(72);
		oa.insert(90);
		oa.insert(45);
		oa.insert(126);
		oa.insert(54);
		oa.insert(99);
		oa.insert(144);
		oa.insert(27);
		oa.insert(135);
		oa.insert(81);
		oa.insert(18);
		oa.insert(108);
		oa.insert(9);
		oa.insert(117);
		oa.insert(63);
		oa.insert(36);
		oa.display();
		int searchKey=27;
		if(oa.find(searchKey)!=oa.size())
			System.out.println("Found"+searchKey+": "+oa.find(searchKey));
		else System.out.println("can not find it "+searchKey);
		
	}

}
class OrdArray{
	private int items;
	private long[] array;
	private int s;
	OrdArray(int max){
		s=max;
		array=new long[s];
	}
	public boolean isFull(){
		return items==s;
	}
	public int size(){
		return items;
	}
	public void insert(long value){
		 int i,j;
		 for(i=0;i<items;i++){
			 if(value<array[i])
				 break;
		 }
		 for(j=items;j>i;j--){
			 array[j]=array[j-1];
		 }
		array[i]=value;
		items++;
	}
	public void display(){
		for(int i=0;i<items;i++){
			System.out.print(array[i]+" ");
		}
		System.out.println();
	}
	public int find(long searchKey){
		return recFind(searchKey,0,items-1);
	}
	public int recFind(long searchKey,int lowBound,int highBound){
		int k=(lowBound+highBound)/2;
		if(array[k]==searchKey)
			return k;
		else if(lowBound>highBound)
			return items;
		else{
			if(searchKey>array[k])
				return recFind(searchKey,k+1,highBound); 
			else 
				return recFind(searchKey,lowBound,k-1);
		}
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值