packageaa;classArray{//定义一个有序数组
private long[] a;//定义数组长度
private intnElems;//构造函数初始化
public Array(intmax){
a= new long[max];
nElems= 0;
}//size函数
public intsize(){returnnElems;
}//定义添加函数
public void insert(longvalue){//将value赋值给数组成员
a[nElems] =value;//然后将数组长度加一
nElems ++;longtemp;//用冒泡法排序
for(int i = 0; i < nElems - 1; i ++)
{for(int j = 0; j < nElems - 1 - i; j++)
{if(a[j] > a[j + 1])
{
temp=a[j];
a[j]= a[j + 1];
a[j+ 1] =temp;
}
}
}
}//定义查找方法
public int find(longsearchKey){//因为是有序数组,我们可以用二分法来查找时间为 O(logN),如果线性查找则为O(N)//下限
int lowerBound = 0;//上限
int upperBound = nElems -1;//中间值
intcurIndex;while(true)
{
curIndex= (lowerBound + upperBound) / 2;if(a[curIndex] ==searchKey)
{returncurIndex;
}else if(lowerBound >upperBound)
{returnnElems;
}else{if(a[curIndex] >searchKey)
{
upperBound= curIndex -1;
}else{
lowerBound= curIndex + 1;
}
}
}
}//定义删除方法
public boolean delete(longvalue){int index =find(value);if(index ==size())
{return false;
}else{for(int i = index; i < size(); i++)
{
a[i]= a[i + 1];
}
nElems--;return false;
}
}//定义显示方法
public voiddisplay(){for(int j = 0; j < nElems; j++)
{
System.out.println(a[j]+ " ");
}
System.out.println("");
}
}public classArr {public static voidmain(String[] args)
{int maxSize = 100;
Array arr= newArray(maxSize);
arr.insert(77);
arr.insert(99);
arr.insert(44);
arr.insert(55);
arr.insert(22);
arr.insert(88);
arr.insert(11);
arr.insert(22);
arr.insert(66);
arr.insert(33);
arr.display();int searchKey = 54;if(arr.find(searchKey) !=arr.size())
{
System.out.println("found" +searchKey);
}else{
System.out.println("cant find" +searchKey);
}
arr.delete(22);
arr.delete(55);
arr.delete(99);
arr.display();
}
}