📅  最后修改于: 2023-12-03 14:48:09.039000             🧑  作者: Mango
这是一道来自UGC-NET CS 2017年12月2日考试的问题,考查了程序员的基本能力。在接下来的文字中,我们将对这道问题进行介绍和分析。
下面给出了一个Java方法的原型,请将该方法的实现体填写完整。
public static <T extends Comparable<T>> int binarySearch(T[] array, T elementToSearch) {
int low = 0;
int high = array.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (array[mid].compareTo(elementToSearch) < 0) {
low = mid + 1;
} else if (array[mid].compareTo(elementToSearch) > 0) {
high = mid - 1;
} else {
return mid;
}
}
return -1;
}
这是一道经典的二分查找问题。二分查找通常用于有序数组中查找某个元素,该算法的时间复杂度为O(logN)。这个方法的本质就是在有序数组中查找某个元素。
方法的参数包括一个有序数组和待查找元素。该方法会使用二分查找法在数组中查找指定元素,并返回元素在数组中的索引值。如果数组中不存在该元素,则返回-1。
该方法的实现分为以下几个步骤:
该方法的泛型类型T要求实现了Comparable接口,这是为了保证数组中的元素能够进行比较大小操作。这样,才能使用compareTo方法判断中间位置的元素和待查找元素的大小关系。
根据上述分析,我们可以写出该方法的完整实现:
/**
* 在有序数组中查找指定元素
*
* @param array 有序数组
* @param elementToSearch 待查找元素
* @param <T> 数组元素类型
* @return 元素在数组中的索引值,如果不存在则返回-1
*/
public static <T extends Comparable<T>> int binarySearch(T[] array, T elementToSearch) {
int low = 0;
int high = array.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (array[mid].compareTo(elementToSearch) < 0) {
low = mid + 1;
} else if (array[mid].compareTo(elementToSearch) > 0) {
high = mid - 1;
} else {
return mid;
}
}
return -1;
}
该方法可以应用于任何实现了Comparable接口的有序数组中,如下所示:
Integer[] array = new Integer[]{1, 3, 5, 7, 9};
int index = binarySearch(array, 3);
System.out.println(index); // 输出1
String[] words = new String[]{"apple", "banana", "cat", "dog"};
int wordIndex = binarySearch(words, "dog");
System.out.println(wordIndex); // 输出3
本文介绍了一道来自UGC-NET CS 2017年12月2日考试的问题,主要是关于二分查找的实现,对于Java初学者来说是一道很不错的练手题目。希望本文对读者有所帮助。