Como classifico um vetor (array)?
Para classificar um vetor (array) você deve implementar um método de ordenação ou classificação (sort). Existem diversos algorítmos conhecidos de ordenação, ditos clássicos:
Além destes algoritmos existem vários outros além de variações em suas implementações. Cada um destes algoritmo oferece um desempenho diferente: os algoritmos de seleção e bolha são os mais ineficientes mas os mais simples. O quicksort é um dos mais rápidos algoritmos existentes mas também mais complexo. Livros sobre estruturas de dados geralmente contêm vários dos algoritmos clássicos.
Seguem como exemplo os algoritmos selectionsort e bubblesort. A aplicação sugerida recebe como argumento a quantidade de valores que devem ser ordenados. São criados dois vetores de inteiros com a quantidade especificada e preenchidos com valores aleatórios entre 0 e quantidade informada. Estes vetores, que possuem os mesmos valores, são submetidos um a ordenação por seleção e o outro a ordenação por bolha.
public class SortDemo { public static final void main(String args[]) { if (args.length < 1) { System.out.println("Uso: SortDemo quantidadeValores"); return; } int max = Integer.parseInt(args[0]); int vetor1[] = new int[max]; int vetor2[] = new int[max]; long inicio, fim; System.out.println("Preenchendo vetores com " + max + " valores..."); for (int i=0; i<max; i++) { vetor1[i] = (int)(Math.random()*max); vetor2[i] = vetor1[i]; } System.out.print("\nSelection Sort..."); inicio = System.currentTimeMillis(); selectionSort(vetor1); fim = System.currentTimeMillis(); System.out.println("tempo: " + (fim-inicio) + "ms"); System.out.print("\nBubble Sort..."); inicio = System.currentTimeMillis(); bubbleSort(vetor2); fim = System.currentTimeMillis(); System.out.println("tempo: " + (fim-inicio) + "ms"); } public static final void selectionSort(int v[]) { int temp; int max = v.length; for(int i=0; i<max-1; i++) for (int j=i+1; j<max; j++) { if (v[i]>v[j]) { temp = v[i]; v[i] = v[j]; v[j] = temp; } } } public static final void bubbleSort(int v[]) { int temp; int max = v.length; for(int i=max-1; i>0; i--) for (int j=0; j<i; j++) { if (v[j]>v[j+1]) { temp = v[j+1]; v[j+1] = v[j]; v[j] = temp; } } } }
O tempo decorrido em milisegundos é informado apenas como referência. Sugere-se o teste com 500 ou mais valores dependendo da performance do computador utilizado. Resultados de tempo menores que 100ms não são representativos devido a precisão do relógio interno da maioria dos computadores.