Dúvida sobre Arrays.sort(arr1, elem1, COMPARATOR1) e Arrays.binarySearch(arr1, elem1, COMPARATOR2)  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
RafaelVS
JavaEvangelist
[Avatar]

Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline

Pessoal,

Dado o código abaixo:



Alguém sabe explicar por que a saída é:

Array inicial: [2, 3, 1, 5]
Com a ordenação 1, a lista fica assim [5, 3, 2, 1] e a posição do número 3 é: 1
Com a ordenação 2, a lista fica assim [1, 2, 3, 5] e a posição do número 3 é: -1

[]'s

- Mestrando em Engenharia de Software no CIn/UFPE;
- Pós-Graduado em Engenharia de Software na POLI/UPE;
- Bacharel em Ciência da Computação na UNICAP (Universidade Católica de Pernambuco);
- Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (score 95%);
- Sun Certified Web Components Developer for J2EE 1.4 Platform (score 89%)
hadilson
Debugger

Membro desde: 11/08/2007 23:51:17
Mensagens: 64
Localização: Uberlândia
Offline

Na busca binária, primeiro, toma-se o elemento do meio e compara-se com o elemento chave de procura (no caso, o três). Se for igual, retorna a posição; se maior, toma-se o elemento do meio, entre o meio prévio e o final; se menor, toma-se o elemento do meio, entre o início e o prévio. E continua.

No caso do seu teste, no primeiro caso, temos:
meio = (inicio + fim)/2 = (0 + 3)/2 = 1
Por sorte, na primeira tentiva ele achou o 3 que você pediu. (Se você tentar um chave de procura que não esteja no meio do array ele não vai achar.)

No segundo caso, a chave de busca não é igual ao meio. O algoritmo compara para saber qual o proximo segmento a analisar. Pela ordenação, o elemento é maior do que o meio, mas o comparator é inverso, e vai informar que é menor. Como no primeiro segmento, a chave não está presente, retorna -1.

"Politics is supposed to be the second oldest profession. I have come to realize that it bears a very close resemblance to the first." Ronald Reagan.

Adilson Pereira Silva
Universidade Federal de Uberlândia
[MSN]
RafaelVS
JavaEvangelist
[Avatar]

Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline

Perfeito, hadilson

testei procurando o elemento 1 (que não está no meio em nenhuma das ordenações) e o resultado foi:

Array inicial: [2, 3, 1, 5]
Com a ordenação 1, a lista fica assim [5, 3, 2, 1] e a posição do número 3 é: -1
Com a ordenação 2, a lista fica assim [1, 2, 3, 5] e a posição do número 3 é: -5

Esse sim é o resultado que eu esperava na versão anterior (2 resultados negativos).

Valeu!

- Mestrando em Engenharia de Software no CIn/UFPE;
- Pós-Graduado em Engenharia de Software na POLI/UPE;
- Bacharel em Ciência da Computação na UNICAP (Universidade Católica de Pernambuco);
- Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (score 95%);
- Sun Certified Web Components Developer for J2EE 1.4 Platform (score 89%)
anderson.bonavides
GUJ Master
[Avatar]

Membro desde: 30/07/2007 22:43:05
Mensagens: 1151
Offline

Tentei compilar sua questão com todas as bibliotecas mas deu problema no List... pede pra mim renomear ele...


Sun Certified Java Programmer 5.0
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team