Estou com erro no método e não conseguo saber o que fazer ?? ajuda por favor!!
Escreva um programa que tenha um método de busca binária, onde receba um valor genérico e uma List.
Deve retornar o índice em que o elemento se encontra nessa lista ou -1, caso o elemento não seja encontrado.
No m
Se você puder postar o código e o erro que está tendo ajudaria um pouco
É isso, tchê?
[code]public class Test extends TestCase{
public void test(){
List<Integer>list = new ArrayList<>();
for(int i : new int[]{1, 5, 4, 3, 2})
list.add(i);
assertTrue( teste(list, 3) == 2);
assertTrue( teste(list, 6) == (-1));
}
private int teste(List<Integer>list, int procura){
Integer[] array = new Integer[list.size()];
list.toArray(array);
Arrays.sort(array);
int binarySearch = Arrays.binarySearch(array, procura);
return binarySearch >= 0 ? binarySearch : -1;
}
}
[/code]
É quase isso, gustavocontabeis. Só que seu método não é genérico.
E por que você transforma a lista em array? a classe Collections também possui os métodos sort e binarySearch
Isso é exercício de aula de Estrutura de Dados, ele quer uma implementação de busca binária, não um que usa a do Java que já está pronta.
No Wikipedia tem um pronto para você estudar, e alterar de array para list: http://pt.wikipedia.org/wiki/Pesquisa_binária#Java
Só precisa antes montar uma lista já ordenada de valores, ou não vai funcionar.
Desculpa galera, q sou novo aqui ficou meio incompleto
o codigo tá aqui mas
mas nao ta retornando
coloquei varias saidas pra ver onde ta passando o programa e nao to encontrando erro nenhum
package exericiobinario;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
public class Main {
public static <E extends Comparable<E>> int BuscaBinaria (List<E> lista, E valor){
int esq = 0;
int dir = lista.size();
int valorMeio;
valorMeio = esq + ((dir - esq) / 2);
E meio = lista.get(valorMeio);
System.out.println("valor do meio" + valorMeio +" Valor esquerda" + esq + "valor direita "+ dir);
if (lista.size() <= 1 && valor.equals(meio)){
System.out.println("Todos os numeros que contem na lista devem acabar aqui o programa");
return lista.indexOf(valor);
}else if (lista.size() <= 1 && !valor.equals(meio)){
System.out.println("Qualquer que nao contenha para aqui");
return -1;
}else if (valor.equals(meio)){
System.out.println("Todos os numeros que contem na lista devem acabar aqui o programa");
return lista.indexOf(valor);
}else if (valor.compareTo(meio) < 0){
System.out.println("passa aki4++++");
return BuscaBinaria(lista.subList(esq, valorMeio), valor);
}else if (valor.compareTo(meio) > 0){
System.out.println("passa aki5++++");
return BuscaBinaria(lista.subList(valorMeio, dir), valor);
}else
return -1;
}
public static <E> void main(String[] args) {
List<Integer> lista = new ArrayList<Integer>();
lista.add(1);
lista.add(2);
lista.add(3);
lista.add(4);
lista.add(5);
lista.add(6);
lista.add(7);
lista.add(8);
lista.add(9);
lista.add(10);
String resp = JOptionPane.showInputDialog(null, "Qual o numero que deseja?");
int procura = Integer.valueOf(resp);
BuscaBinaria(lista, procura);
}
}
Alguém por favor
me ajude
Por favor, quando for postar código, use as tags .
O fato de não ter usado elas pode ter sido o motivo de ninguém ter te ajudado até agora.
Mas vamos ao seu problema, o que ocorre de errado? Você não deveria atribuir o retorno do método BuscaBinaria a alguma variável?