package com.datastruct;
public class OrdArray {
private long [] a;
private int nElems=0;
public OrdArray(int max){
a=new long[max];
}
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){
upperBound=curIn-1;
}else{
lowerBound=curIn+1;
}
}
}
}
public void insert(long value){
if(nElems==0){
a[0]=value;
nElems++;
return ;
}
int lowerBound=0;
int upperBound=nElems-1;
int curIn;
while(true){//二分法的体现 中间值和插入值得大于,等于,小于的比较
curIn=(lowerBound+upperBound)/2;
if(lowerBound>upperBound){
break;
}
if(a[curIn]==value){
break;
}else if(a[curIn]<value){
if(curIn==nElems-1){//中间值小于插入值
curIn=curIn+1;
break;
}else if(a[curIn+1]>=value){//中间值小于插入值,往后推一位大于插入值
curIn=curIn+1;
break;
}else{
lowerBound=curIn+1;//中间值小于插入值,低边界值往后推一位
}
}else{//中间值大于要插入的值
if(curIn==0){
break;
}else if(a[curIn-1]<=value){//中间值大于插入值,往前一位小于插入值,停止
break;
}else{
upperBound=curIn-1;//中间值大于插入值,高边界往中间值前推一位
}
}
}
for(int k=nElems;k>curIn;k--){
a[k]=a[k-1];
}
a[curIn]=value;
nElems++;
}
public boolean delete(long value){
int j=this.find(value);
if(j==nElems){
return false;
}
for(int k=j;k<nElems;k++){
a[k]=a[k+1];
}
nElems--;
return true;
}
public void disPlay(){
for(int j=0;j<nElems;j++){
System.out.println(a[j]);
}
}
}
package com.datastruct;
public class OrdArrayApp {
public static void main(String [] args){
int maxSize=100;
OrdArray arr=new OrdArray(maxSize);
arr.insert(77);
arr.insert(99);
arr.insert(44);
arr.insert(55);
arr.insert(22);
arr.insert(88);
arr.insert(11);
arr.insert(00);
arr.insert(66);
arr.insert(33);
arr.disPlay();
}
}