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…
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
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
tanque
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…
A má é que fui rodar meu MIDlet e deu OutOfMemoryException …
Alguem tem alguma sugestão de: 1.Por que aconteceu isso? 2. Qual seria a solução?
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:
…e, pra variar, eu esqueci que tava no forum de J2ME. Foi mal, cara
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)