我已经创建了数组和一个对数组进行排序的方法,但我仍然坚持如何在数组中实现二进制搜索方法。还需要从主类中的数组中调用二进制搜索方法。
public class Search {
public static boolean binarySearch(int[] array, int value) {
return binarySearchHelper(array, value, 0, array.length);
}
private static boolean binarySearchHelper(int[] array, int value, int low, int high) {
if (low <= high) {
int mid = (low + high) / 2;
if (value == array[mid]) {
return true;
} else if (value < array[mid]) {
return binarySearchHelper(array, value, low, mid - 1);
} else {
return binarySearchHelper(array, value, mid + 1, high);
}
}
return false;
}
public static boolean linearSearch(int[] array, int value) {
for (int i = 0; i < array.length; i++) {
if (array[i] == value) {
return true;
} else if (array[i] > value) {
return false;
}
}
return false;
}
这是主要的
import java.util.Random;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
//System.nanoTime() will give me the current time (it's like looking at the clock)
//I'll save the current time right (immediately) before I start the thing I want to time
long start = System.nanoTime();
long elapsed = System.nanoTime() - start;
Random value = new Random();
int size = 2000;
int max = 5000;
int[] array = new int[size];
for (int i = 0; i < size; i++) {
array[i] = value.nextInt();
}
Arrays.sort(array);
for (int i = 100; i < 2000; i+=100) {
start = System.nanoTime();
for ( int j = 0; j < 2000; j++){
Search.binarySearch(array, value.nextInt());
}
}
elapsed = System.nanoTime() - start;
System.out.println("Total time elapsed is: "+ elapsed);
}
}
答案 0 :(得分:1)
到目前为止,您的二进制搜索方法本身对我很有用。
您的问题出在main
方法中:
for ( int j = 0; j < 2000; j++){
return array;
}
首先,当您使用return
语句时,任何方法都将结束并返回给调用者。因此,只执行循环的一次迭代,这可能不是您的预期行为。
然而,这无论如何都不会发生在这里 - 你无法编译这句话。 Java main
方法始终具有返回类型void
,这意味着在使用return
语句时无法返回任何值。
由于我假设您正在尝试创建基准测试,因此您可能对搜索结果不感兴趣,您只关心执行它需要多长时间。
要实现这一目标,为什么不打电话给它并丢弃结果呢?
for ( int j = 0; j < 2000; j++){
Search.binarySearch(array, value.nextInt());
}
在旁注中,value
可能是包含Random
引用的变量的次优名称,因为它不会告诉您其中的内容 - {{1 }或valueGenerator
可能是更好的选择。对于较大的项目,这个提示可能特别方便,因为变量实例化的地方并不总是很明显。