二元和线性搜索
Posted
技术标签:
【中文标题】二元和线性搜索【英文标题】:Binary and Linear search 【发布时间】:2013-04-09 20:38:30 【问题描述】:这个程序假设检测是否找到了一个整数,以及找到了多长时间。第一个是线性搜索,第二个是二分搜索。我遇到的问题是这样的。线性搜索有效,但我不断收到“线性搜索成功”的消息。老实说,我不确定为什么二进制搜索没有输出任何东西。任何帮助表示赞赏
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;
【问题讨论】:
System.out.println("Linear search successful")
是 inside for
循环;这就是你看到它重复的原因。
【参考方案1】:
这是因为您从不调用binarySearch()
函数。你只打电话给linearSearch()
。
/* Call to linearSearch is here */
int linear = linearSearch(numbers, searchValue);
/* No call to binarySearch to put here */
【讨论】:
谢谢,现在可以使用了。我想念的总是很明显的事情【参考方案2】:System.out.println("Linear search successful")
把它放在 for 循环之外
要进行二分搜索,您至少需要调用该函数。
【讨论】:
以上是关于二元和线性搜索的主要内容,如果未能解决你的问题,请参考以下文章