这一系列文章是记录自己学习j2se的点点滴滴,希望自己能慢慢进步。
今天看到java语言程序进阶这本书的第21章的一个练习题是这样的
使用二分查找实现public static <E extends Comparable<E>> int BinarySearch(E[] list,E key)这个方法
自己参考jdk的模仿了一个,几乎一样,做个记录吧,不得不看书,jdk的设计者在函数的复用上做得很好。
jdk代码
// Like public version, but without range checks.
private static int binarySearch0(long[] a, int fromIndex, int toIndex,
long key) {
int low = fromIndex;
int high = toIndex - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
long midVal = a[mid];
if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}
自己写的
public static <E extends Comparable<E>> int BinarySearch(E[] list,E key)
{
System.out.println("自己写的二分查找");
int low = 0;
int high = list.length-1;
while(low<=high)
{
int mid = (high+low)>>>1;
E midValue = list[mid];
if (midValue.compareTo(key)<0) {
low = mid+1;
}
else if (midValue.compareTo(key)>0) {
high = mid-1;
}
else {
return mid;
}
}
return -(low+1);
}