Encontrar os 2 maiores valores de um array

4 respostas
M

bom dia estou fazendo um trabalho de estrutura de dados e preciso implementar um algoritmo para achar 2 maiores valores de um array…

acredito que já tenha achado e feito certo, pelo menos nos meus testes esta dando certo…

segue o código abaixo, mas não estou satisfeito, quero melhorar

não posso usar api java, antes que alguém sugira, pra ordenar…

public void doisMaioresValores() {

		int valores[] = new int[10];

		for (int i = 0; i < valores.length; i++) {
			valores[i] = (int) ((Math.random() * 10));
		}

		int menorValor = valores[0];

		for (int i = 1; i < valores.length; i++) {
			if (valores[i] < menorValor) {
				menorValor = valores[i];
			}
		}

		int maiorValor = menorValor;

		for (int i = 0; i < valores.length; i++) {
			if (valores[i] > maiorValor) {
				maiorValor = valores[i];
			}
		}

		int segundoMaiorValor = menorValor;

		for (int i = 0; i < valores.length; i++) {
			if ((valores[i] > menorValor) && (valores[i] != maiorValor)) {
				menorValor = valores[i];
				segundoMaiorValor = menorValor;
			}
		}

		System.out.println("Segundo Maior Valor: " + segundoMaiorValor);
		System.out.println("Maior Valor: " + maiorValor);

	}

cheguei a criar um codigo novo aonde eu faço comparações para a par de posicoes no array pra achar o maior ou menor, não tenho conseguido achar os 2 ao mesmo tempo

acho os 2 pq pra achar depois o segundo maior vejo sendo importante achar o menor…

public void maiorValor() {

		int vetor[] = new int[100];

		for (int i = 0; i < vetor.length; i++) {
			vetor[i] = (int) (Math.random() * 100);
		}

		int tamanhoVetor = vetor.length;
		int maiorElemento = vetor[0];
		int i = 0;

		if ((tamanhoVetor % 2) != 0) {
			if (vetor[tamanhoVetor - 1] > vetor[(tamanhoVetor - 2)]) {
				vetor[(tamanhoVetor - 2)] = vetor[(tamanhoVetor - 1)];
			}
			tamanhoVetor--;
		}

		while (i != tamanhoVetor) {
			if (vetor[i] > vetor[i + 1]) {
				if (vetor[i] > maiorElemento) {
					maiorElemento = vetor[i];
				}
			} else {
				if (vetor[i + 1] > maiorElemento) {
					maiorElemento = vetor[i + 1];
				}
			}
			i += 2;
		}

		int menorElemento = maiorElemento;
		i = 0;

		while (i != tamanhoVetor) {
			if (vetor[i] < vetor[i + 1]) {
				if (vetor[i] < menorElemento) {
					menorElemento = vetor[i];
				}
			} else {
				if (vetor[i + 1] < menorElemento) {
					menorElemento = vetor[i + 1];
				}
			}
			i += 2;
		}

		for (int valor : vetor) {
			System.out.print(valor + " - ");
		}
		System.out.println("");
		System.out.println("Maior elemento: " + maiorElemento);
		System.out.println("Menor elemento: " + menorElemento);
	}

ai queria a ajuda, pra saber se tem como dentor ja do proprio primeiro while, achar o valor menor…

vlw

4 Respostas

Marcos_Henrique_N_Al

Oi macario1983.

Esta seria minha sugestão para diminuir a quantidade de while na rotina. E ainda retornar os 2 maiores, 3 maiores... números que quiser.

private void doisMaioresValores() {
		int valores[] = new int[10];
	
		for (int i = 0; i < valores.length; i++) {
			valores[i] = (int) (Math.random() * 10);
		}		
		/*
		Sugestão seria de ordenar o array antes.
		Dessa forma não está usando nenhuma API
		O código para ordenar uma array não coisa do outro mundo é bem simples
		*/
		int trocaDePosicao = 0;
		int index = 0;
		while (index < valores.length - 1) {
			if (valores[index] > valores[index + 1]) {
				trocaDePosicao = valores[index];
				valores[index] = valores[index + 1];
				valores[index + 1] = trocaDePosicao;
				index = 0;
				continue;
			}
			index++;
		}
		
		/*
		Agora fica facil informar os números maiores
		*/
		System.out.println("Os dois maiores numeros são: "+valores[0] + " e " + valores[1] + ".");
		
	}
M
Marcos Henrique N.Albino:
Oi macario1983.

Esta seria minha sugestão para diminuir a quantidade de while na rotina. E ainda retornar os 2 maiores, 3 maiores... números que quiser.

private void doisMaioresValores() {
		int valores[] = new int[10];
	
		for (int i = 0; i < valores.length; i++) {
			valores[i] = (int) (Math.random() * 10);
		}		
		/*
		Sugestão seria de ordenar o array antes.
		Dessa forma não está usando nenhuma API
		O código para ordenar uma array não coisa do outro mundo é bem simples
		*/
		int trocaDePosicao = 0;
		int index = 0;
		while (index < valores.length - 1) {
			if (valores[index] > valores[index + 1]) {
				trocaDePosicao = valores[index];
				valores[index] = valores[index + 1];
				valores[index + 1] = trocaDePosicao;
				index = 0;
				continue;
			}
			index++;
		}
		
		/*
		Agora fica facil informar os números maiores
		*/
		System.out.println("Os dois maiores numeros são: "+valores[0] + " e " + valores[1] + ".");
		
	}

e ae cara, tudo bem?

sua ideia realmente é boa e já havia pensando em implementar um algoritmo de ordenação...
no seu caso vc fez um que faz comparação com todos né...
vc fez um bubble sort?

M

A minha função ficou o seguinte:

public void maior(int vetor[]){

int maior = vetor[0];

int menor = vetor[0];

for(int i = 0; i< vetor.length; i++){

if(vetor[i] > maior){

maior = vetor[i];

}

}

for(int j = 0; j < vetor.length; j++){

if(vetor[j] < menor){

menor = vetor[j];

}

}

System.out.println(Maior valor:+ maior);

System.out.println(Menor valor:+ menor);

}
F

Falaí cara... fiz esse exemplo aqui rapidinho inclusive com as saídas pra vc ver os resultados... abração!!!

public static void main(String[] args){
		int valores[] = new int[10];
		int maiorValor1 = 0;
		int maiorValor2 = 0;
		  
	    for (int i = 0; i < valores.length; i++) {  
	        valores[i] = (int) ((Math.random() * 10));  
	    }
	    
	    for (int i = 0; i < valores.length; i++) { 
	    	System.out.println(valores[i]);
	        if(valores[i] > maiorValor1)
	        	maiorValor1 = valores[i];
	        else{
	        	if((valores[i] > maiorValor2) && (valores[i] != maiorValor1))
	        		maiorValor2 = valores[i];
	        }
	    }
	    
	    System.out.println("Maior valor 1: " + maiorValor1);
	    System.out.println("Maior valor 2: " + maiorValor2);
	}
Criado 2 de fevereiro de 2013
Ultima resposta 5 de set. de 2013
Respostas 4
Participantes 4