數組的二分查找法查找元素以及查處刪除元素

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("");
	}
} 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章