1. Descrição do algoritmo
Selecione a triagem: por exemplo, em uma matriz não ordenada de comprimento n, atravesse os dados da primeira viagem, descubra o menor valor e troque-os com o primeiro elemento, a segunda viagem atravessa os dados restantes do N-1, descubra o menor valor e troca com o segundo elemento ... o N-1ST atravessa os dois dados restantes, o menor valor e a troca com a troca com ele com o N-1S.
Os 5 dados não ordenados a seguir são usados como exemplos:
56 12 80 91 20 (O processo de seleção da primeira viagem é refinado apenas no artigo)
1ª viagem: 12 56 80 91 20
2ª viagem: 12 20 80 91 56
Trip 3: 12 20 56 91 80
4ª viagem: 12 20 56 80 91
2. Análise de algoritmo
Complexidade média do tempo: o (n2)
Complexidade espacial: o (1) (para troca e índices de registro)
Estabilidade: instável (por exemplo, o primeiro [5] e [3] são trocados na primeira viagem da sequência [5, 5, 3], fazendo com que os primeiros 5 se movam atrás do segundo 5)
3. Implementação de algoritmo
classe pública seleção seleção {public static void main (string [] args) {int len = 15; int [] ary = new int [len]; Aleatório aleatório = novo aleatório (); for (int j = 0; j <len; j ++) {ary [j] = aleatom.nextInt (1000); } System.out.println ("------------------"); // ary = new int [] {10,9,8,7,6,5,4,3,2,1}; // trocas de teste // ary = new int [] {1,2,3,4,5,6,7,8,10,9}; // trocas de teste para (int j = 0; j <ary.length; j ++) {System.out.print (ary [j]+""); } selectDesc (ary); selectasc (ary); }/ * * Selecione Classificação: Descendente */Void estático SelectDesc (int [] ary) {int compareCount = 0; // Compare os tempos int chanGeCount = 0; // número de trocas int len = ary.length; int maxvalueIndex = -1; // Registre o índice de valor mínimo após uma rodada de comparações para (int i = 0; i <len - 1; i ++) {maxvalueIndex = i; // de 0 para (int j = i+1; j <len; j ++) {if (ary [maxValueIndex] <ary [j]) {maxValueIndex = j; // Registre o maior índice compareCount ++; }} // System.out.println ("minValueIndex ==" + maxValueIndex); if (maxValueIndex! = i) {// Se o índice for diferente do registro à esquerda, troca [i] = ary [maxValueIndex]+(ary [maxValueIndex] = ary [i]) * 0; // troca de umta-step cambount ++; }} System.out.println ("/n ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ (int i = 0; i <len - 1; i ++) {minindex = i; ary [minindex]+(ary [minindex] = ary [i]) * 0; System.out.println ("/n --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- for (int j = 0; j <ary.length; j ++) {System.out.print (ary [j]+""); }}}Imprimir
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------