Coleções.sort ()
A classificação de Java pode ser implementada com o coletileos.sort ().
Existem dois métodos para classificar a lista com o método de coleções.Sort:
O primeiro é o objeto na lista para implementar a interface comparável, como segue:
/*** Classifique o usuário de acordo com o pedido*/public classe implementa comparável <suário> {nome do número inteiro privado; Nome;} Public Integer Getrder () {Return Order;} public void setOrder (Ordem Inteiro) {this.order = Order;} public int Compareto (Usuário arg0) {rn this.getOrder (). );}} Teste:
Teste público {public static void main (string [] art) {user user1 = novo usuário (); ); (lista); O resultado da saída é o seguinte
Ab
O segundo método é alcançar com base no método de carregamento de coleções.Sort, como ::
/*** Classifique o usuário de acordo com o pedido*/public class Usuário {// Não há necessidade de implementar a interface comparável. Ordem de retorno;} public void Setorder (ordem inteira) {this.order = order;}}} Escreva na classe principal ::
Teste público {public static void main (string [] art) {user user1 = novo usuário (); ); INT COMPARE (Usuário Arg0, Usuário Arg1) {return arg0.getorder (). getName ());}}} O resultado da saída é o seguinte
Ab
A estrutura de código anterior é simples, mas só pode ser classificada de acordo com os atributos fixos.
Escolha o melhor.
Algoritmo de classificação comum
Vejamos a prática do código Java com vários algoritmos clássicos de classificação:
Classificação de bolhas
Public static void bubblesort (int a [], int n) {int i, j; j ++) {if (a [j]> a [j + 1]) {a [j] = a [j] ^ a [j + 1]; [j + 1];Insira diretamente o tipo
Public static void insertSort (int a [], int n) {int i, j, tmp; j; ;}}}Escolha diretamente
Public static void SelectSort (int a [], int n) {int i, j, local; n; j ++) {if (a [j] <a [loc]) {loc = j;}} se (loc! [loc] = a [i] ^ a [loc];Classificação
/ ** * Classificação de heap (de pequena a grande) * * @param a * @param n */ public static void heapsort (int a [], int n) {int tmp; n); 0, j);}} / ** * Construa muitas raízes * * * * * @param a * @param n * / private estático void BuildMaxHeap (int a [], int n) {for (int i = ( n -2) / 2; I * @param n * / private estático void maxheapify (int a [], int i, int n) {int esquerdista, direita, local; i + 2; ;} if (loc! = i) {a [i] = a [loc] ^ a [i]; a [i];} else {break;}}}Classificação rápida
Public static void Quicksort (int a [], int bt, int ed) {if (bt <ed) {int pivot = pivotputition (a, bt, ed); 1, ed);}} private estático void swapvar (int a [], int bt, int ed) {int mid = bt + (ed -bt) / 2; ) bt] = a [bt] ^ a [mid]; Bt, int ed) {// Pegue o valor intermediário como suporte para impedir a matriz em uma aparência ordenada o (n^2) Swapvar (a, bt, ed); Ed) {while (bt <ed && a [ed]> = stand) {ed-;} if (bt <ed) {a [bt ++] = a [ed]; bt ++;} if (bt <ed) {a [eds ---] = a [bt];} [bt] = estado;Mesclar
Public static void mesmort (int a [], int bt, int ed) {if (bt <ed) {int mid = bt + (ed -bt) / 2; Ed); ; = A [j]) {tmp [k] = a [i ++];} else {tmp [k] = a [j ++]; ] = a [j ++];} para (i = 0; i <k; i ++) {a [bt+i] = tmp [i];}}Programa de teste
Venha e resuma o algoritmo acima:
Importar java.util.scanner; Cin.Nextint (); ; ** * Mesclar classificar * * * @param a * @param bt * @param eds * / public static void memort (int a [], int bt, int ed) {if <ed) {int mid = bt + (ed. -Bt) / 2; param bt * @param mid * @param ed */ private estático void mergearray (int a [], int bt, int mid, int ed) {int i, j, k, k, len = ed -bt + 1; Tmp [] = new int [len]; <= a [j]) {tmp [k] = a [i ++];} else {tmp [k] = a [j ++];}} while (i <= mid) {tmp [k ++ ] = A [i ++];} while (j <= ed) {tmp [k ++] = a [j ++];} para (i = 0; i <k; i ++) {a [ bt+i] = tmp [i];} / ** * classificar rapidamente * * * @param a * @param bt * @param ed * / public static void Quicksort (int a [], int bt, int ed) { If (bt <ed) {int pivot) = pivotPartition (a, bt, ed); a [], int bt, int ed) {int mid = bt + (ed -bt) / 2; ] = a [bt] [mid]; param eds * @return */ private static int pivotPartition (int a [], int bt, int ed) {// Pegue o valor intermediário como suporte para impedir a matriz em uma aparência ordenada o (n^2) Swapvar (a, a, Bt, ed); +] = a [ed];} while (bt <ed && a [bt] <= stand) {bt ++;} if (bt <ed) {a [eds ---] = a [bt];} a [bt] = stand; ) {int tmp; [J]; [], int n) {for (int i = (n -2) / 2; i> = 0; i-) {maxheapify (a, i, n);} / ** * Manutenção A pilha máxima de manutenção inicial A partir do lance i * * * * @param a * @param n * / private estático void maxheapify (int a [], int i, int n) {int esquerdo, direito, local; 2 * i + 1; ]) {i = direita;} if (loc! = i) {a [a) i] = a [loc] ^ a [i]; i] = a [loc] ^ a [i];} else {break;}}}}} / ** * Selecione a classificação diretamente * * * @param a * @param n * / public static void selectSort (int a [ ], int n) {int i, j, local; (a [j] <a [loc]) {loc = j;}} if (loc! = i) {a) {a) [i] = a [i] ^ a [loc]; a [i] ^ a [loc]; (int a [], int n) {int i, j, tmp; 0; classificar * * * @param a * @param n * / public static void bubblesort (int a [], int n) {int i, j; (j = 0; j <n -i -1; j ++) {if (a [j]> a [j +1]) {a [a [a j] = a [j] ^ a [j + 1]; * @param a * / public static void printarr (int a []) {for (int i = 0; i <.Length; i ++) {if (i == A.Length -1) {System.out. printf ("%d/n", a [i]);} else {System.out.printf ("%d", a [i]);}}}}}}