您的位置:首页 > 编程语言 > Java开发

java通过二分法对数组进行高效查找及插入操作

2016-07-06 15:29 435 查看
public class OrderArray {
private long[] a;
private int nElems;

public OrderArray(int max){
a = new long[max];
nElems = 0;//代表数组中元素个数
}

public int size(){
return nElems;
}

public int find(long searchKey){
int beginIndex = 0;
int endIndex = nElems - 1;
int center;
while (true){
center = (beginIndex + endIndex)/2;
if(a[center] == searchKey)
return center;
else if(beginIndex > endIndex){
return nElems;
}else {
if(a[center] < searchKey)
beginIndex = center + 1;
else
endIndex = center - 1;
}
}
}

public boolean insert(long value){
nElems = find(value);
if(nElems == 0 || value > a[nElems - 1]){
a[nElems] = value;
nElems++;
return true;
}
if(value < a[0]) {
for (int k = nElems; k > 0; k--)
a[k] = a[k - 1];
a[0] = value;
nElems++;
return true;
}

int beginIndex = 0;
int endIndex = nElems - 1;
int center;
while (true){
center = (beginIndex + endIndex)/2;
if(a[center] < value){
if(a[center + 1] > value){
for(int k = nElems;k > center + 1;k--)
a[k] = a[k - 1];
a[center + 1] = value;
nElems++;
return true;
}else{
beginIndex = center + 1;
}
}else{
endIndex = center;
}
}
}

public boolean delete(long value){
int i = find(value);
if(i == nElems)
return false;
else {
for (; i < nElems; i++)
a[i] = a[i + 1];
nElems--;
return true;
}
}

public void display(){
for(int j = 0;j < nElems;j++)
System.out.print(a[j] + " ");
System.out.println(" ");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java class