二分查找比线性查找数度要好很多,尤其是对大数组来说更为显著。
BinarySearch.java 类如下:
public class BinarySearch {
private long[] a;
private int nElems;
//初始化构造函数。
public BinarySearch(int max)
{
a = new long[max];
nElems = 0;
}
//获取数组的大小。
public int getSize()
{
return nElems;
}
//查找
public int find(long keyValue)
{
return recFind(keyValue,0,nElems-1);
}
//二分查找
public int recFind(long searchKey,int lowwerBound,int upperBound)
{
int curIndex;
curIndex = (lowwerBound+upperBound)/2;
if(a[curIndex] == searchKey)//找到
{
return curIndex;
}
else if(lowwerBound>upperBound)//没找到。
{
return nElems;
}else{
if(a[curIndex]<searchKey)//二分递归查找
{
return recFind(searchKey, curIndex+1, upperBound);
}else
{
return recFind(searchKey, lowwerBound, curIndex-1);
}
}
}
//put element into array!
public void insert(long value)
{
int j;
for(j=0;j<nElems;j++)
if(a[j]>value)
break;
for(int k=nElems;k>j;k--)
a[k] = a[k-1];
a[j] = value;
nElems++;
}
//显示数组元素。
public void display()
{
for(int i=0;i<nElems;i++)
{
System.out.println(a[i]+" ");
}
}
}