public boolean binarySearch( int first, int last, T desiredItem){
boolean found;
int mid = (first + last)/2;
if(first > last)
found = false;
else if(desiredItem.equals( list[mid]))
found = true;
else if (desiredItem.compareTo( list[mid]) < 0)
found = binarySearch(first, mid - 1, desiredItem);
else
found = binarySearch(mid + 1, last, desiredItem);
return found;
}
public boolean contains(T anEntry){
return binarySearch(0, length - 1, anEntry);
}
时间效率:
最好情况:O(1)
最坏情况:O(log n)
平均情况: O(log n)
Java类库:binarySearch方法
包java.util中的类Arrays定义了静态方法binarySearch的若干版本,其说明如下:
/**Task:在整个数组中查找指定的元素
* @param array一个升序排序的数组
* @param desiredItem待在数组中查找的元素
* @return 等于desiredItem的数组元素的索引,否则返回 -belongsAt - 1,其中
* belongsAt是应该含有desiredItem的元素的索引*/
public static int binarySearch(type[] array, type desiredItem);
其中两次出现的type必须是相同的;type可以是Object,也可以是诸如byte,char, double, float, int, long, short 的任何基本类型。