[英]Binary and Linear search
該程序假設檢測是否找到整數以及找到所需的時間。 第一個是線性搜索,第二個是二分搜索。 我遇到的問題是這個。 線性搜索有效,除了我一次又一次地收到消息“線性搜索成功”。 老實說,我不確定為什么二進制搜索沒有輸出任何內容。 任何幫助表示贊賞
public class search {
/**
* @param args
*/
public static void main(String[] args) {
Scanner scanner1 = new Scanner(System.in);
System.out.println("Please enter in an integer:");
int searchValue = scanner1.nextInt();
int[] numbers = new int[1000];
try {
Scanner scanner = new Scanner(new File("numbers.txt"));
for (int i = 0; i < 1000; i++) {
numbers[i] = scanner.nextInt();
}
} catch (FileNotFoundException e) {
System.out
.println("A problem occurred reading the file numbers.txt");
System.exit(0);
}
long time = System.nanoTime();
int linear = linearSearch(numbers, searchValue);
long end = System.nanoTime();
System.out.println(end - time);
}
public static int linearSearch(int[] numbers, int searchValue) {
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] > searchValue)
return -1;
else if (numbers[i] == searchValue)
return i;
System.out.println("Linear search successful");
}
return -1;
}
public int binarySearch(int searchValue, int[] numbers) {
long time = System.nanoTime();
int low = 0;
int high = numbers.length - 1;
while (low <= high) {
int middle = low + (high - low) / 2;
if (numbers[middle] == searchValue) {
System.out.println("Binary found");
long end = System.nanoTime();
System.out.println(end - time);
}
if (searchValue < numbers[middle])
high = middle - 1;
else if (searchValue > numbers[middle])
low = middle + 1;
else
return middle;
}
return -1;
}
}
這是因為您從不調用binarySearch()
函數。 您只調用linearSearch()
。
/* Call to linearSearch is here */
int linear = linearSearch(numbers, searchValue);
/* No call to binarySearch to put here */
System.out.println("Linear search successful")
將其放在 for 循環之外,並且要進行二進制搜索,您至少需要調用該函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.