Duvidas como ordenar uma lista de nomes em ordem alfabética

7 respostas
S

Gente, como eu faço para ordenar uma lista de nomes inseridos pelo usuario em ordem alfabética?
Quando vi a proposta do exercicio achei bem facil, pois logo pensei no metodo Array.sort() e até bubblesort, porém quando fui apresentar ao professor ele me disse que
eu nao poderia usar Array e nem metodos que nao seja criados por mim mesmo, fiquei um pouco nervoso pq ele só me disse isso faltando 2 dias para o prazo final de entrega do exercicio, e nao consegui bolar nada até agora, alguem poderia me dar uma força?

valeu

7 Respostas

alberthy

Já que o professor não quer que você utilize nenhum método para auxiliar na tarefa, adicione todos os nomes no banco e depois faça um SELECT com ORDER BY e mostre o resultado. Caso contrário, vai dar um pouco de trabalho.

thiago_dias

Olha cara, Já fiz um algoritmo deste tipo para a faculdade.
O objetivo era ordenar um array de String comparando apenas as duas primeiras letras dos nomes.
Sei que o algoritmo é limitado(POG total), porém pode te ajudar a iniciar algo mais elaborado.

class TestOrdenacao {
	
	public static void main(String[] args) {
		//Testando método de ordenação
		String[] nomes = ordenaArray(new String[]{"Fulano", "Sicrano", "Beltrano", "Barabara", "Samy", "Fabiana" });
		
		//Imprime os nomes
		for (int i = 0; i < nomes.length; i++) {
			System.out.println(nomes[i]);
		}
		
	}

	//Método de ordenação
	public static String[] ordenaArray(String[] arrayNomes){
		
		// variável para auxiliar na troca dos nomes
		String aux = "";
		
		for (int i = 0; i < arrayNomes.length; i++) {
			
			for (int j = 0; j < arrayNomes.length; j++) {
				String nome1 = arrayNomes[i];//string que está no índice i do array.
				String nome2 = arrayNomes[j];//string que está no índice j do array.
				
				//A primeira letra do nome2 é maior do que a primeira letra do nome1 ?
				if(nome2.charAt(0) > nome1.charAt(0)){
					//utiliza a variável auxiliar e trocar os nomes de posição no array.
					aux = nome1; 
					arrayNomes[i] = nome2;
					arrayNomes[j] = aux;
				
					//A primeira letra do nome2 é igual a nome1?
				}else if(nome2.charAt(0) == nome1.charAt(0)){
					//Compara a segunda letra
					if(nome2.charAt(1) > nome1.charAt(1)){
						aux = nome1;
						arrayNomes[i] = nome2;
						arrayNomes[j] = aux;
					}	
					
				}
			}
	
		}

		return arrayNomes;
	}
}

Aceito críticas quanto ao código postado :XD:

Falou

JuniorMaia

onde que você não pode usar array? Apenas na ordenação?

ViniGodoy

Sem usar arrays fica impossível. Acho que ele quis dizer que você não pode usar o Arrays.sort, pois aí vc não implementou a ordenação.

Provavelmente ele quer o clássico Bubble Sort:

package br.com.guj;

public class OrdenarNomes {
	public static void main(String[] args) {
		String nomes[] = { &quot;Homem Aranha&quot;, &quot;Hulk&quot;, &quot;Homem de Ferro&quot;,
				&quot;Superman&quot;, &quot;Charles Xavier&quot;, &quot;Tempestade&quot;, &quot;Wolverine&quot; };

		for (int i = 0; i &lt; nomes.length - 1; ++i)
			for (int j = i + 1; j &lt; nomes.length; ++j)
				if (nomes[i].compareTo(nomes[j]) &gt; 0) {
					String temp = nomes[i];
					nomes[i] = nomes[j];
					nomes[j] = temp;
				}
		
		for (String nome : nomes)
			System.out.println(nome);
	}
}
E

pode usar uma lista duplamente encadeada com insertion sort.

rmendes08

Basta você implementar um algoritmo de ordenação qualquer. A única coisa que muda com relação a ordenação de inteiros é a comparação entre String’s. Se você não puder usar o método compareTo() da classe String você pode implementar um por sua conta.

R

Veja isto:

http://www.guj.com.br/java/286911-lista-dup-encadeada-com-no-cabeca-perfeita-para-fins-didaticos#1516601

Tem um método de ordenação.

Criado 7 de junho de 2012
Ultima resposta 9 de nov. de 2012
Respostas 7
Participantes 8