查询:采用二分查找
删除的时候需要移动元素,保证数组的有序性
有序数组的优缺点:
优点:查找速度快
缺点:插入的时候需要按照排序方式把后面的数据移动
有序数组和无序数组的共同缺点:删除时数据项的数据向前移动来填补删除项的洞
public class OrdArray {
private long [] a;
public int element;
public OrdArray(int max){
a=new long[max];
element=0;
}
public int size(){
return element;
}
//二分查找的方法
public int find(long serachkey){
int lowerbound=0;//初始位置
int upperbound=element-1;//最后一个的位置
int curln;//当前位置
while(true){
curln=(lowerbound+upperbound)/2;//取到中间位置
if(a[curln]==serachkey)
return curln;
else if (lowerbound>upperbound) //没有找到数据
return element;//返回大于最大索引整数
else {//继续查找
if (a[curln]<serachkey) {//往后面查
lowerbound=curln+1;//改变最小索引
}else {//往前面查
upperbound=curln-1;
}
}
}
}
//添加数据项(线性查找)
public void insert(long value){
int j;
for(j=0;j<element;j++)
if(a[j]>value)break;
for(int k=element;k>j;k--)
a[k]=a[k-1];//数据向前移动
a[j]=value;
element++;
}
//删除数据项
//先用二分查找到数据然后再删除数据
public boolean delete(long value){
int j=find(value);
if (j==element) {
return false;
}else{
for(int k=j;k<element;k++)
a[k]=a[k+1];
element--;
return true;
}
}
//显示数据项
public void display(){
int j;
for(j=0;j<element;j++)
System.out.print(a[j]+" ");
System.out.println();
}
}