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("");
}
}
版权声明:本文为qq_36689512原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。