如何创建一个实现递归二进制搜索的循环来搜索数组中的n个数字? JAVA

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建一个实现递归二进制搜索的循环来搜索数组中的n个数字? JAVA相关的知识,希望对你有一定的参考价值。

我的代码只打印一个数字,如何创建一个循环来搜索n个数字?

package binariarecursiva;

import java.util.Scanner; / ** * * @author User * / public class BinariaRecursiva {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) 
{

  int[] array = {1, 3, 5, 6, 8, 12, 19, 21, 27, 31, 35, 45, 80, 81, 82, 85, 87, 89, 95, 101, 200, 501, 707, 1000};
  Scanner teclado = new Scanner(System.in);
  int n = teclado.nextInt();
  int x = teclado.nextInt();
  int esquerda = 0;
  int direita = array.length-1;
  System.out.println(buscaBinaria(array,  esquerda,  direita, x, n));
}

public static int buscaBinaria (int[] array, int esquerda, int direita, int x, int n)
{
    int meio = (esquerda + direita)/2; 
    if(direita < esquerda)
    {
        return -1; 
    }

    if(x==array[meio])
    {
        return meio; 
    }
    else if(x<array[meio])
    {
       return buscaBinaria(array, esquerda, meio - 1, x);
    }
    else
    {
        return buscaBinaria(array, meio + 1, direita, x);          
    }
}

}

答案

你只需要改变你的main()方法。首先,您已经从用户输入中读取了n的值。然后循环n次,在每次迭代时,您询问用户他想要搜索的值。

public static void main(String[] args)
{
    int[] array = {1, 3, 5, 6, 8, 12, 19, 21, 27, 31, 35, 45, 80, 81, 82, 85, 87, 89, 95, 101, 200, 501, 707, 1000};
    Scanner teclado = new Scanner(System.in);
    System.out.print("Enter number of runs: ");
    int n = teclado.nextInt();
    int esquerda = 0;
    int direita = array.length-1;
    for(int i = 0; i < n; i++) {
        System.out.print("Enter number to search for: ");
        int x = teclado.nextInt();
        System.out.println(buscaBinaria(array, esquerda, direita, x));
    }
}

同时更改buscaBinaria()的签名,它不需要n作为参数。

完整代码

package binariarecursiva;
import java.util.Scanner;

public class BinariaRecursiva {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {

        int[] array = {1, 3, 5, 6, 8, 12, 19, 21, 27, 31, 35, 45, 80, 81, 82, 85, 87, 89, 95, 101, 200, 501, 707, 1000};
        Scanner teclado = new Scanner(System.in);
        System.out.print("Enter number of runs: ");
        int n = teclado.nextInt();
        int esquerda = 0;
        int direita = array.length-1;
        for(int i = 0; i < n; i++) {
            System.out.print("Enter number to search for: ");
            int x = teclado.nextInt();
            System.out.println(buscaBinaria(array, esquerda, direita, x));
        }
    }

    public static int buscaBinaria (int[] array, int esquerda, int direita, int x)
    {
        int meio = (esquerda + direita)/2;
        if(direita < esquerda)
        {
            return -1;
        }

        if(x==array[meio])
        {
            return meio;
        }
        else if(x<array[meio])
        {
            return buscaBinaria(array, esquerda, meio - 1, x);
        }
        else
        {
            return buscaBinaria(array, meio + 1, direita, x);
        }
    }
}

以上是关于如何创建一个实现递归二进制搜索的循环来搜索数组中的n个数字? JAVA的主要内容,如果未能解决你的问题,请参考以下文章

数组中的二分查找

将递归函数分配给python中的变量

字符串数组中字符串(多个实例)的递归二进制搜索 - C#

Fortran 95 中的二进制搜索

具有多个列表的递归排列

算法题解:二分查找算法(循环/递归)