Ordenamiento por selección
Busca el menor de los que faltan y lo pone en su lugar.
- Nivel
- Intermedio
- Conceptos:
- Entrada y salida
- Arreglos
- Para
- Si
- Azar
- SubProcesos
Ejecuta, modifica y depura este ejemplo en el navegador.
Lo que aprenderás
En la vuelta i se busca el menor entre las posiciones i y n, y se lo lleva a la posición i con un solo intercambio. Siempre recorre todo lo que falta, así que hace unas n²/2 comparaciones aunque los datos ya estén ordenados: O(n²) en todos los casos, pero como mucho n - 1 intercambios.
Código
// Muestra el arreglo completo solo si es corto (30 o menos)SubProceso MostrarDatos(titulo, datos, n) Definir i Como Entero Si n <= 30 Entonces Escribir Sin Saltar titulo Para i <- 1 Hasta n Hacer Escribir Sin Saltar datos[i], " " FinPara Escribir "" SiNo Escribir titulo, n, " números (el primero es ", datos[1], " y el último ", datos[n], ")" FinSiFinSubProcesoAlgoritmo OrdenamientoSeleccion Definir datos, n, i, j, minimo, aux, intercambios Como Entero Escribir "¿Cuántos números quieres ordenar? (1 a 512)" Leer n Dimension datos[n] Para i <- 1 Hasta n Hacer datos[i] <- Aleatorio(1, 99) FinPara MostrarDatos("Antes: ", datos, n) intercambios <- 0 // "Con Paso 1" evita que el Para cuente hacia atrás cuando n = 1 Para i <- 1 Hasta n - 1 Con Paso 1 Hacer // Buscamos el menor entre las posiciones i y n minimo <- i Para j <- i + 1 Hasta n Hacer Si datos[j] < datos[minimo] Entonces minimo <- j FinSi FinPara // Y lo llevamos a la posición i con un solo intercambio Si minimo <> i Entonces aux <- datos[i] datos[i] <- datos[minimo] datos[minimo] <- aux intercambios <- intercambios + 1 FinSi FinPara MostrarDatos("Después: ", datos, n) Escribir "Intercambios realizados: ", intercambiosFinAlgoritmoDiagrama de flujo
Cada bloque del diagrama corresponde a una instrucción del código.
Ejemplo de ejecución
Esto muestra el programa al ejecutarlo. Las respuestas escritas por el usuario aparecen resaltadas.
¿Cuántos números quieres ordenar? (1 a 512)Respuesta del usuario: 12Antes: 68 56 75 80 18 35 34 44 6 37 11 41 Después: 6 11 18 34 35 37 41 44 56 68 75 80 Intercambios realizados: 9
Complejidad
Cuánto trabajo y memoria necesita según la cantidad de datos (n).
| Caso | Costo |
|---|---|
| Mejor | O(n²) |
| Promedio | O(n²) |
| Peor | O(n²) |
| Memoria | O(1) |
Características:No estableEn el lugar
Desafío
Cuenta también cuántas comparaciones hace y compáralas con n * (n - 1) / 2.
Ver pista
Suma 1 a un contador justo antes del Si que compara datos[j] con datos[minimo].
Ejemplos relacionados
Búsqueda lineal contra binaria
Cuenta las comparaciones que necesita cada búsqueda en la misma lista ordenada.
IntermedioOrdenamiento Shell
Una inserción entre elementos lejanos, con un salto que se achica en cada pasada.
AvanzadoOrdenamiento por mezcla
Parte el arreglo en mitades, ordena cada una con recursión y las mezcla.
Avanzado