Ordenamiento por inserción
Inserta cada número entre los ya ordenados, como al acomodar cartas en la mano.
- Nivel
- Intermedio
- Conceptos:
- Entrada y salida
- Arreglos
- Para
- Mientras
- Si
- Lógicos
- Azar
- SubProcesos
Ejecuta, modifica y depura este ejemplo en el navegador.
Lo que aprenderás
La parte izquierda del arreglo siempre está ordenada. Cada número nuevo se guarda en actual, los mayores se corren un lugar a la derecha y actual entra en el hueco. Con datos casi ordenados casi no corre nada (O(n)); en el promedio y en el peor caso es O(n²).
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 OrdenamientoInsercion Definir datos, n, i, j, actual, desplazamientos Como Entero Definir ubicado Como Logico 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) desplazamientos <- 0 // Las posiciones 1 a i-1 ya están ordenadas; insertamos datos[i] entre ellas Para i <- 2 Hasta n Con Paso 1 Hacer actual <- datos[i] j <- i - 1 ubicado <- Falso // Corremos un lugar a la derecha los que son mayores que actual Mientras j >= 1 Y (NO ubicado) Hacer Si datos[j] > actual Entonces datos[j + 1] <- datos[j] j <- j - 1 desplazamientos <- desplazamientos + 1 SiNo ubicado <- Verdadero FinSi FinMientras // El hueco que quedó es su lugar datos[j + 1] <- actual FinPara MostrarDatos("Después: ", datos, n) Escribir "Desplazamientos: ", desplazamientosFinAlgoritmoDiagrama 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: 45 56 40 56 96 77 8 60 39 86 74 43 Después: 8 39 40 43 45 56 56 60 74 77 86 96 Desplazamientos: 30
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:EstableEn el lugar
Desafío
Genera los datos ya ordenados (por ejemplo datos[i] <- i) y mira cuántos desplazamientos hace.
Ver pista
Cambia Aleatorio(1, 99) por i en el primer Para; el contador de desplazamientos debería dar 0.
Ejemplos relacionados
Ordenamiento burbuja
Ordena números al azar intercambiando vecinos, y se detiene apenas quedan ordenados.
IntermedioOrdenamiento por montículo
Organiza el arreglo como un montículo y saca el mayor una y otra vez.
AvanzadoBúsqueda lineal contra binaria
Cuenta las comparaciones que necesita cada búsqueda en la misma lista ordenada.
Intermedio