java计算2分法查找次数

public class BinarySearch {
public static int genetalLoop(int arr[],int searchWord) {
int low = 0;
int high = arr.length - 1;

while (high >= low) {
int mid = (low + high) / 2;
/*System.out.println(mid);*/
if (searchWord < arr[mid]){
high = mid - 1;
}else if (searchWord == arr[mid]){
return mid;
}else{
low = mid + 1;
}
}
return (-low - 1);

}
}
请问怎么计算次数,返回一个值,怎么调用打印。

初学者请教各位大神。
最新回答
熙撤▍love≈

2024-10-30 09:56:40

2分法查找,前提是要有序,要排序,必然要比较大小,所以只要一个类它实现了Comparable接口的compareTo(T o)方法(Comparable在java.lang包中)或是实现一个比较器对象接口Comparator(Comparator在java.util包),都可以进行比较了。不管是String型,计本数据类型,还是其他什么的,都可以用2分发查找了。给你看看API
java.util.Collections中2分法的API
binarySearch
public static <T> int binarySearch(List<? extends Comparable<? super T>> list,
T key)使用二分搜索法搜索指定列表,以获得指定对象。在进行此调用之前,必须根据列表元素的自然顺序对列表进行升序排序(通过 sort(List) 方法)。如果没有对列表进行排序,则结果是不确定的。如果列表包含多个等于指定对象的元素,则无法保证找到的是哪一个。
此方法对“随机访问”列表运行 log(n) 次(它提供接近固定时间的位置访问)。如果指定列表没有实现 RandomAccess 接口并且是一个大型列表,则此方法将执行基于迭代器的二分搜索,执行 O(n) 次链接遍历和 O(log n) 次元素比较。
参数:
list - 要搜索的列表。
key - 要搜索的键。
返回:
如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入列表的那一点:即第一个大于此键的元素索引;如果列表中的所有元素都小于指定的键,则为 list.size()。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
抛出:
ClassCastException - 如果列表中包含不可相互比较 的元素(例如,字符串和整数),或者搜索键无法与列表的元素进行相互比较。
昔年°c

2024-10-30 11:24:53

计算次数就是看while循环执行了几次嘛,这样就行了:
int i=0;
while (high >= low) {
i++;
...
}
System.out.println(i);

另外你的程序里 return (-low - 1); 不对啊,这样while循环执行一次就直接return了