当使用二分查找时能体现出有序数组的好处。并且这种查找比线性查找快很多,尤其是对大数组来说更为显著
Java实现:
public class OrdArray {
private long[] a;
private int nElems;
public OrdArray(int max) {
a = new long[max];
nElems = 0;
}
public int size() {
return nElems;
}
public int find(long searchKey) {//二分法查找
int lowerBound = 0;
int upperBound = nElems - 1;
int cruIn;
while (true) {
cruIn = (lowerBound + upperBound) / 2;
if (a[cruIn] == searchKey) {
return cruIn;
} else if (lowerBound > upperBound) {
return nElems;
} else {
if (a[cruIn] < searchKey)
lowerBound = cruIn + 1;
else
upperBound = cruIn - 1;
}
}
}
public void insert(long value) {//二分法插入
if (nElems == 0) {
a[0] = value;
nElems ++;
return;
}
int lowerBound = 0;
int upperBound = nElems - 1;
int cruIn;
while (lowerBound <= upperBound) {
cruIn = (lowerBound + upperBound) / 2;
if (a[cruIn] < value)
lowerBound = cruIn + 1;
else
upperBound = cruIn - 1;
}
for (int k = nElems; k > upperBound + 1; k--)
a[k] = a[k - 1];
a[upperBound + 1] = value;
nElems++;
}
public boolean delete(long value) {
int j = find(value);
if (j == nElems)
return false;
else {
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.print(a[j] + " ");
System.out.println("");
}
}