Ordenação de dados

:?: Oi gente, tudo bem? Eu tô começando a entrar no mundo Java, e surgiu uma dúvida: existe alguma função, sem ser a Collections.sort (), que me permita ordenar dados armazenados em Java? Resumindo, como eu faço pra colocar um vetor em ordem alfabética, e consequentemente as outras informções?
Desde já agradeço pela ajuda. Valeu!

Arrays.sort();

vc passa por parametro um vetor de qualquer tipo, e ele ordena

há mais coisas a se considerar, mas básicamente é isso

Iniciante82, Seja bem vindo ao PJ!!!

Só algumas dicas:

se sua lista for de Strings, elas serão ordenadas em ordem lexicográfica…

se constituir de elementos do tipo Date, ele será ordenado em ordem cronológica…

O Java realiza essas ordenações através da:

:arrow: Interface Comparable
:arrow: Ordenação Natural

:wink:

primeiramente, Bem Vindo ao Mundo Java e ao PJ!

Só para complementar:

Você pode implementar um algoritmo qualquer de ordenação, entre os muito conhecidos, e muitos deles você encontra pela net, tipo:

  • BubbleSort (bom para listas pequenas)
  • QuickSort e RandomQuickSort(O melhor e mais utilizado para listas grandes)
  • SelectionSort (Muito Ruim)
  • InsertionSort

Eu não sei se já existe estes métodos no JDK (eu acho que não 8O ) mas você pode fazer uma classe de ordenação, que utilize o compareTo dos elementos. O mais recomendado é você fazer tipo o seguinte:

[code]class Sort {
public static List sort(List lista) {
if(lista.size() > 2000) return quickSort(lista);
else return bubbleSort(lista);
}

public List bubleSort(List lista) {
//…
}

public List quickSort(List lista) {
//…
}
}[/code]

Eu mesmo acho que fica mais legal!

Espero ter ajudado

()'s

Primeiramente, gostaria de agradecer a todos vocês que estão me ajudando a conhecer um pouco mais sobre o Java, vou estar sempre por aqui pedindo ajuda, tá :cool: ? Mas tenho outra dúvida: e se eu quiser fazer um array de nomes e outro com as respectivas idades, por exemplo, como eu posso ordenar os nomes, e consequentemente as idades.
Ah! Se alguém souber me dizer onde eu posso encontrar estas funções do Java, agradeço!

Valeu!

O melhor a se fazer é criar uma classe (Pessoa, por exemplo) que implementa Comparable, que guarda os atributos nome e idade. Ai voce implementa um compareTo(Object o), fazendo a comparação pelo nome.

Voce armezena estes objetos em uma List (como o ArrayList), e quando for ordenar, o método utiliza o compareTo da sua classe. Então será ordenao os nomes seguidos da idade.

Espero ter ajudado!

()'s

Como assim? :?: Não entendi direito. Eu já tenho a classe com os atributos, o que eu não entendi, é como implementar um Comparable? Como posso fazer isso?
Obrigado.

vc pode simplesmente ordenar os dois juntos se vc tiver o seu proprimo algoritimo… basta qndo vc for trocar dois elementos de posicao, troque as posicoes do outro array tb… apesar que o mais aconcelhavel eh criar uma classe que tenha todos os atributos desejados, dai vc implementa Comparable e no metodo compareTo() faz a comparacao… dai vc pode ateh ter uma variavel estatica pra determinar o criteiro da ordenacao (seja por idade ou por nome)…

e qnto ao exemplo do PARQUE_MACABRO, n vale apena por um if pra decidir se vai ordenar com o bublesort ou com o quicksort, o bublesort tem a unica vantagem da facilidade, ou seja, ele eh simples e facil de aplicar, se vc jah ta escrevendo o quicksort, nao faz sentido usar o bublesort tb… mesmo com poucos elementos o quicksort eh mais rapido…

ta ai o algoritimo do quicksort:

public void quicksort(int p, int q, Comparable array[]){
 if (p < q){
  int x = particao(p, q, array);
  quicksort(p, x - 1, array);
  quicksort(x + 1, q, array);
 }
}
public int particao(int p, int q,Comparable array[]){
 int j = p - 1;
 Comparable aux = array[q];
 for (int i = p; i <= q; i++){
  if (array[i].compareTo(aux) <= 0) troca(array, i, ++j);
 }
 return j;
}
public void troca(Comparable array[], int i, int j){
 Comparable aux = array[i];
 array[i] = array[j];
 array[j] = aux;
}

lembre-se que arrays sao passados por referencia, portanto nao tem necessidade de ficar retornando o array pra atribuicao ou que o array seja uma variavel global…

É, acho que só o quickSort serve mesmo… andei estudando análise e eficiência de algoritmos demais… eheheh

Existe uma diferença sim, mas é de milisegundos (eheheh), acho que só é perceptível se o mesmo método seja chamada em várias Threads concorrentes, ou algo do tipo…

Mas o teu quickSort tá muito legal!

()'s

Deve-se levar em conta que o quicksort só é o melhor se os elementos estiverem completamente fora de ordem.

Quando vc não tem nossa da disposição dos elementos o melhor é o MergeSort que é o pau pra toda obra e roda sempre em n lg n.

Gente, valeu mesmo pela ajuda que vocês me deram. Vocês ajudaram a clarear a minha mente, por isso vou estar sempre por aqui tirando dúvidas com vocês.
Obrigado. :slight_smile: