Ordenação de Vector ou arrays em J2ME

15 respostas
raphaelpaiva

Tenho uma classe chamada Aniversariante.
Nesta classe, tem uma propriedade chamada dataAniversario.
Tenho um Vector contendo vários objetos Aniversariante.

Qual seria a melhor forma de ordenar os aniversariantes pela data de aniversário?
Ou seja, retornar um Vector com os objetos Aniversariante ordenados…

Obrigado

15 Respostas

louds

usando quicksort, ou mantendon seu vetor sempre ordenado.

raphaelpaiva

procurei e não achei nenhum exemplo do quicksort ou ao menos a que classe ele pertence… :roll:

cv1

Sendo mais pratico: crie um Comparator e chame Collections.sort(collection, comparator). Prontinho :smiley:

raphaelpaiva

Que eu saiba, CLDC não tem Collection, muito menos Comparator…

A minha dúvida é como se faz isso com J2ME, e não com J2SE :lol:

T

Como ja havia sugerido num outro post aqui, ou abra o arquivo src.zip do seu J2SE, ou baixe o GNU Classpath, e procure no arquivo Collections.java a implementacao de sort de la, grabeie para sua classe e mande bala. Talvez precise de alguns ajustes .

Soh tenha cuidado com a licensa do codigo que voce usou.

raphaelpaiva

Pessoal! Tenho uma boa e uma má notícia.
A boa é que optei por fazer o código sozinho(incluso abaixo). Estou utilizando recursividade… :smiley:
A má é que fui rodar meu MIDlet e deu OutOfMemoryException :cry:

Alguem tem alguma sugestão de: 1.Por que aconteceu isso? 2. Qual seria a solução?

private static Vector vet;

private static void ordena(Vector vetor, int tamanho){

if(tamanho != 0){

for(int i = 0; i < vetor.size() - 1; i++){

int data1 = Integer.parseInt(((Aniversariante)vetor.elementAt(i)).dataAniversario.trim());

int data2 = Integer.parseInt(((Aniversariante)vetor.elementAt(i+1)).dataAniversario.trim());

if( data1 > data2){

Aniversariante temp = (Aniversariante)vetor.elementAt(i);

vetor.insertElementAt((Aniversariante)vetor.elementAt(i+1),i);

vetor.insertElementAt((Aniversariante)temp,i+1);

}

}

ordena(vetor, tamanho-1);

}else{

vet = vetor;

}

}

public static Vector ordena(Vector vetor){

ordena(vetor,vetor.size());

return vet;

}
Daniel_Takabayashi

não conheço muito bem J2ME, porém acho que esta solução serve pra vc sim…
é o seguinte implemente a sua classe com a interface “Comparable” e implemente o método “compareTo”(para comparar o seu objeto do jeito que vc quiser, lembrando de seguir a especificação da API)…

depois é só chamar o método estatico Arrays.sort(novovetor,vetor);

pronto…

louds

quicksort é um algoritmo, um google por ‘quicksort java’ me deu:

http://developer.novell.com/ndk/doc/samplecode/njcl_sample/NSIBrowser/QuickSort.java.html

cv1

…e, pra variar, eu esqueci que tava no forum de J2ME. Foi mal, cara :smiley:

louds

Caramba, acabei de me dar conta que voce ta usando buble sort recursivo!!! Não faz isso!! É absurdamente lento!!!

Andre_Breves

Não recomendo muito usar algoritmos recursivos no J2ME, porque o tamanho da pilha não é lá essas coisas. Se a quantidade de dados for pequena, usa o selection sort, senão usa um Heapsort.

louds

Por que não quicksort ou introsort? Costumam ser bem mais rápidos que merge/heap sort nos casos normais.

Andre_Breves

O quicksort é rápido sim, mas o problema é que a pilha pode não aguentar a recursão. Já o heapsort, apesar de ter tempo assintótico de n*log(n), como o quicksort, tem uma constante embutida maior. MAS tem a vantagem de ser iterativo, além de ordenar no próprio vetor, o que não usa muita memória além da que guarda os dados a serem ordenados.

louds

quicksort é recursivo somente se voce quiser…

sergiolopes

dá pra implementar o quicksort iterativo… é um pouco mais complicado mas é possível…

e se vc está buscando rapidez, o melhor é mesclar algoritmos… num trabalho pra facul semestre passado, fiz varios testes de algoritmos de ordenacao… entre os q vi, o mais rapido era um que misturava QuickSort e InsertionSort… se o tamanho da partiçao no QuickSort fosse menor que 6 elementos, eu usava InsertionSort ao inves de ir particionando isso… pq o QuickSort é rapido pra um n consideravel, para n muito pequeno ele é mais lento q os algoritmos quadraticos (na pratica)

enfim, vale a pena brincar com essas coisas :slight_smile:

Criado 31 de março de 2004
Ultima resposta 3 de abr. de 2004
Respostas 15
Participantes 7