1. Descripción del algoritmo
Seleccione la clasificación: por ejemplo, en una matriz de longitud no ordenada de datos de longitud, transversal en el primer viaje, descubra el valor más pequeño e intercambie con el primer elemento, el segundo viaje atraviese los datos N-1 restantes, descubra el valor más pequeño e intercambie con el segundo elemento ... el N-1ST transversa los dos datos restantes, descubra el valor más pequeño y el intercambio con el elemento N-1 y la selección de la selección de la clasificación de la clasificación.
Los siguientes 5 datos desordenados se utilizan como ejemplos:
56 12 80 91 20 (El proceso de selección del primer viaje solo se refina en el artículo)
Primer viaje: 12 56 80 91 20
2do viaje: 12 20 80 91 56
Viaje 3: 12 20 56 91 80
4to viaje: 12 20 56 80 91
2. Análisis de algoritmo
Complejidad promedio de tiempo: O (N2)
Complejidad del espacio: O (1) (para índices de intercambio y registro)
Estabilidad: inestable (por ejemplo, los primeros [5] y [3] se intercambian en el primer viaje de la secuencia [5, 5, 3], lo que hace que los primeros 5 se muevan detrás del segundo 5)
3. Implementación de algoritmo
Public Class SelectionSort {public static void main (string [] args) {int len = 15; int [] ary = new int [len]; Aleatorio aleatorio = new Random (); for (int j = 0; j <len; j ++) {ary [j] = random.nextint (1000); } System.out.println ("------------------"); // ary = new int [] {10,9,8,7,6,5,4,3,2,1}; // intercambios de prueba // ary = new int [] {1,2,3,4,5,6,7,8,10,9}; // Test Exchanges para (int j = 0; j <ary.length; j ++) {system.out.print (ary [j]+""); } selectdesc (ary); selectasc (ary); }/ * * Seleccione Ordenar: Descendiendo */static void selectDesc (int [] ary) {int comparecount = 0; // Compare Times int ChangeCount = 0; // número de intercambios int len = ary.length; int maxValueIndex = -1; // Registre el índice de valor mínimo después de una ronda de comparaciones 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; // registrar un índice más grande comparación ++; }} // system.out.println ("minvalueIndex ==" + maxValueIndex); if (maxValueIndex! = i) {// Si el índice es diferente del registro de la izquierda, intercambia ary [i] = ary [maxValueIndex]+(ary [maxValueIndex] = ary [i]) * 0; // un paso de intercambio Changeunt ++ de un paso; }} 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
--------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------