【问题标题】:Random Number Array using binarySearch and Linear Search使用二元搜索和线性搜索的随机数数组
【发布时间】:2015-06-03 20:40:14
【问题描述】:

我已经创建了数组和对数组进行排序的方法,但我仍然坚持如何在数组中实现二进制搜索方法。还需要从主类的数组中调用二分查找方法。

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);
    }
}

【问题讨论】:

标签: java arrays binary-search linear-search


【解决方案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 的引用的变量的次优名称,因为它不会告诉您其中的内容 - valueGeneratorrandom 可能是更好的选择.对于较大的项目,这个技巧可能特别方便,因为变量实例化的位置并不总是很明显。

【讨论】:

  • 当我改变了我写的内容并运行它现在给我这个 resultException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2000 at inlab4.Search.binarySearchHelper(Search.java:16) at inlab4 .Search.binarySearchHelper(Search.java:21)
  • 非常感谢您的帮助,对于迟到的回复感到抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
相关资源
最近更新 更多