[quote=Paulo Silveira]O codigo do ricardo esta perfeito. Nao precisa ordenar!! Mas ainda da pra melhorar.
Ele faz praticamente 2*n comparacoes… da pra fazer com uma quantidade menor que isso de comparacoes. Quem se atreve?
[/quote]
Na verdade são 3 comparações por item. Tem também a comparação do “for”. hehehe
E o for conta como comparação? Não sei… bem, eu cheguei nisso aqui, comparando por pares:
int listanumeros[] = new int[5];
listanumeros[0]=15;
listanumeros[1]=30;
listanumeros[2]=50;
listanumeros[3]=05;
listanumeros[4]=03;
int maior = Integer.MIN_VALUE;
int menor = Integer.MAX_VALUE;
int lastMaior = listanumeros[0];
int lastMenor = Integer.MAX_VALUE;
for (int i=0; i<listanumeros.length-1; i=i+2) {
maior = listanumeros[i+1];
menor = listanumeros[i];
if (listanumeros[i] > listanumeros[i+1]) {
maior = listanumeros[i];
menor = listanumeros[i+1];
}
if (maior > lastMaior) {
lastMaior = maior;
}
if (menor < lastMenor) {
lastMenor = menor;
}
}
if (listanumeros.length%2==1) {
if (listanumeros[listanumeros.length-1]< lastMenor) {
lastMenor = listanumeros[listanumeros.length-1];
}
else {
if (listanumeros[listanumeros.length-1]> lastMaior) {
lastMaior = listanumeros[listanumeros.length-1];
}
}
}
System.out.println("maior = " + lastMaior);
System.out.println("menor = " + lastMenor);
Galera aproveitando o tópico, como posso colocar uns 3 numero ou mais em ordem crescente ou decrescente ?
estou tentando fazer mais não consigo…alguem pode me explicar mais n em java faz em pseudo-código por favor.
[quote=marciobarroso]Paulo …
Tentei, mas não conseguí … como seria possível implementar algo com complexidade 3N/2 ???
[]'s[/quote]
Arvores Binárias?
E o for conta como comparação? Não sei… [/quote]
for (int i=0;[color=red] i<listanumeros.length-1[/color]; i=i+2) {
No caso, faz a comparação a cada loop para determinar se realiza outro (loop) ou não.
Se você só quisesse determinar o valor máximo, a complexidade seria O(n) (ou seja, n comparações), porque você precisa varrer todos os elementos (já que eles estão em qualquer ordem), não dá para ser menor que isso.
O que o Paulo está dizendo é que é possível achar o máximo e o mínimo, em menos de 2 n comparações.
Em complexidade de algoritmos os índices dos loops normalmente não são levados em consideração, somente as operações “lentas” e “significativas” (que no caso é a comparação).
(Uma comparação de números de ponto flutuante é razoavelmente rápida, mas não uma de strings, se as strings forem arbitrariamente grandes. É por isso que em ordenação a operação de comparação é considerada “significativa”.
o codigo do dreamspeaker me parece correto
a sacada é fazer uma comparacao dois a dois, e depois so coparar o menor local com o menor global e a mesma coisas pro maior. da 3 comparacoes para cada par de numeros. 3n/2.
E -2 comparacoes por causa do primeiro par nao ter com quem comparar…