我们都知道二分查找,下面我们尝试写一个适用于所有类型的数组二分查找泛型方法。
代码如下:
/**
* 泛型方法:二分查找法
* @param array 查找数组
* @param key 查找元素
* @param <T> 类型变量
* @return
*/
public static <T extends Comparable<? super T>> int search(T[] array, T key) {
int low = 0;
int mid = 0;
int high = array.length;
System.out.println("查找的中间值:");
while (low <= high) {
mid = (low + high) / 2;
System.out.print(mid+" ");
if (key.compareTo(array[mid]) > 0) {
low = mid + 1;
} else if (key.compareTo(array[mid]) < 0) {
high = mid - 1;
} else {
System.out.println();
return mid;
}
}
return -1;
}
测试方法如下:
public static void main(String[] args) {
Integer[] ints = {1,2,3,4,5,6,7,8,9,10};
System.out.println("数据集合:");
System.out.println(Arrays.toString(ints));
System.out.println("元素3所对于的索引序号:"+search(ints, 7));
}
运行之: