数组的二分查找法查找元素以及查处删除元素

package 算法demo;

public class 二分法 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
           int maxSize=100;
           OrdArray arr;
           arr=new OrdArray(maxSize);
           arr.insert(1);
           arr.insert(2);
           arr.insert(3);
           arr.insert(4);
           arr.insert(5);
           arr.insert(6);
           arr.insert(7);
           arr.insert(8);
           arr.insert(9);
           arr.insert(0);
           int searchKey=55; //search for item
           if(arr.find(searchKey)!=arr.size())
        	   System.out.print("Found"+ searchKey);
           else
        	   System.out.print("can not find it" +searchKey);
           arr.display();
           arr.delete(7);
           arr.delete(5);
           arr.display();
	}

}
class  OrdArray{
	private long[] a; //ref to array a
	private int nElems;//number of data items
	//.................................
	public OrdArray(int max){   //constructor
		a=new long[max];
		nElems=0;
	}
	//............................
	public int size(){
		return nElems;
	}
	public int find(long searchKey){
		int lowerBound=0;
		int upperBound=nElems-1;
		int curIn;
		while(true){
			curIn=(lowerBound+upperBound)/2;
			if(a[curIn]==searchKey)
				return curIn;//find it
			else if(lowerBound >upperBound)
				return nElems;  //can not find it
			else{
				if(a[curIn]<searchKey)
					lowerBound =curIn+1;   //it is in upper half
				else
					upperBound=curIn-1;//it is in lower half
			}//end else divide rang
		}//end while
	}//end find()
	public void insert(long value){  //put element into array
		int j;
		for(j=0;j<nElems;j++)   //find where it goes
			if(a[j]>value)    //(linear search)
				break;
		for(int k=nElems;k>j;k--)//move bigger ones up
			a[k]=a[k-1];
			a[j]=value;     //insert it
			nElems++;       // increment size
	}//end insert()
	public boolean delete(long value){
		int j=find(value);
		if(j==nElems)
			return false;
		else{
			for(int k=j;k<nElems;k++)
				a[k]=a[k+1];
			nElems--;
			return true;
		}
	}//end delete()
	public void display(){
		for(int j=0;j<nElems;j++)
			System.out.print(a[j]+"");
		System.out.println("");
	}
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值