二元和线性搜索

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 循环之外 要进行二分搜索,您至少需要调用该函数。

【讨论】:

以上是关于二元和线性搜索的主要内容,如果未能解决你的问题,请参考以下文章

搜索之BM25和BM25F模型

c_cpp 二元搜索 - 圆形旋转阵列的应用

线性搜索和二分搜索有啥区别?

如何使用伪代码开发线性搜索和二分搜索算法。?

我的二进制搜索和线性搜索的问题[关闭]

线性和二进制搜索