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); }}请问怎么计算次数,返回一个值,怎么调用打印。初学者请教各位大神。
2分法查找,前提是要有序,要排序,必然要比较大小,所以只要一个类它实现了Comparable接口的compareTo(T o)方法(Comparable在java.lang包中)或是实现一个比较器对象接口Comparator(Comparator在java.util包),都可以进行比较了。不管是String型,计本数据类型,还是其他什么的,都可以用2分发查找了。给你看看APIjava.util.Collections中2分法的APIbinarySearchpublic 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 - 如果列表中包含不可相互比较 的元素(例如,字符串和整数),或者搜索键无法与列表的元素进行相互比较。
计算次数就是看while循环执行了几次嘛,这样就行了:int i=0;while (high >= low) { i++; ...}System.out.println(i);另外你的程序里 return (-low - 1); 不对啊,这样while循环执行一次就直接return了