数据结构:二分查找法

代码展示:

package erfenfa;

public class OrdArray {
private long[] a;
private int nElems;

//构造方法 给数组a 和 nElems初始化
public OrdArray(int max) {
// TODO Auto-generated constructor stub
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; //查找成功
}else if(lowerBound>upperBound){
return nElems;  //查找失败,返回数组中数据的个数
}else {
if(a[curIn]<searchKey){  // 二分法中的细节代码
lowerBound = curIn+1;
}else{
upperBound = curIn-1;
}
}
}

}

 

//插入
public void insert(long value){
int j;
for(j=0;j<nElems;j++){
if(a[j]>value){
break;
}
}
for(int i=nElems;i>j;i--){
a[i] = a[i-1];
}
a[j] = value;
nElems++;
}

 

//删除
public boolean delete(long value){
int key = find(value);//先查找是否存在要删除的数据

if(key==nElems){
return false;    //删除数据不存在
}else{
for(int i = key;i<nElems;i++){
a[i]=a[i+1];
}
nElems--;
return true;
}
}

 

//打印全部
public void display(){
for(int i =0;i<nElems;i++){
System.out.println(a[i]+"");
}
}
}

 

----------------------------------------分割线------------------------------------------------------

package erfenfa;

public class OrderedApp {
public static void main(String[] args) {
OrdArray ard = new OrdArray(100);
ard.insert(77);
ard.insert(99);
ard.insert(44);
ard.insert(55);
ard.insert(22);
ard.insert(88);
ard.insert(11);
ard.insert(00);
ard.insert(66);
ard.insert(33);
if(ard.find(33)!= ard.size()){
System.out.println("查找成功");
}else{
System.out.println("查找失败");
}

ard.delete(00);
ard.delete(33);
ard.display();


}

}