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

来源:互联网 发布:matlab复制一个矩阵 编辑:程序博客网 时间:2024/04/30 09:40
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 aprivate int nElems;//number of data items//.................................public OrdArray(int max){   //constructora=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 itelse if(lowerBound >upperBound)return nElems;  //can not find itelse{if(a[curIn]<searchKey)lowerBound =curIn+1;   //it is in upper halfelseupperBound=curIn-1;//it is in lower half}//end else divide rang}//end while}//end find()public void insert(long value){  //put element into arrayint j;for(j=0;j<nElems;j++)   //find where it goesif(a[j]>value)    //(linear search)break;for(int k=nElems;k>j;k--)//move bigger ones upa[k]=a[k-1];a[j]=value;     //insert itnElems++;       // 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