Sí lo es. También es muy ineficiente, ya que realizará demasiados intercambios, pero tiene todas las características de un tipo de selección:
- separa la matriz en dos particiones, una ordenada y otra no;
- encuentra el elemento mínimo de la partición sin clasificar y lo cambia a la primera posición;
- mueve el límite de partición en uno hacia arriba;
- se completa en 0 (n²).
Sin embargo, la selección de selección canónica solo tiene un intercambio por iteración externa:
public static void selectionSort (matriz [int]) {
for (int i = 0; i <array.length – 1; i ++) {
// Encuentra el mínimo en la submatriz sin clasificar.
int min = i;
for (int j = i + 1; j <array.length; j ++) {
if (matriz [min]> matriz [j]) {
min = j;
}
}
// Cambia el mínimo a la primera posición de una submatriz sin clasificar.
// El if es opcional, pero ahorrará tiempo si la matriz es
// ya ordenado
si (i! = min) {
int temp = matriz [i];
matriz [i] = matriz [min];
matriz [min] = temp;
}
}
}
- ¿Dónde se usan realmente las estructuras de datos?
- ¿Pueden los algoritmos de aprendizaje automático reforzar los estereotipos?
- Cómo usar lower_bound para buscar una cadena en una estructura vectorial
- Dado un gráfico dirigido, ¿podemos hacer DFS en cada nodo para encontrar el nodo de mayor valor?
- ¿Qué es un objeto de matriz de vértices en OpenGL?
Por supuesto, esto requiere más código y requiere una variable adicional para mantener el mínimo, por lo que si eso es una preocupación por cualquier motivo (hey, a veces todos codificamos en un hardware que tiene 64kB de RAM), su solución es realmente mejor.