Saltar al contenido
EjemplosEnglishEspacio →

Ordenamiento burbuja

Ordena números al azar intercambiando vecinos, y se detiene apenas quedan ordenados.

Nivel
Intermedio
Conceptos:
Entrada y salida
Arreglos
Para
Mientras
Si
Lógicos
Azar
SubProcesos
Abrir en Codoritmo

Ejecuta, modifica y depura este ejemplo en el navegador.

Lo que aprenderás

En cada pasada se comparan los vecinos y se intercambian si están al revés, así el mayor "sube" hasta el final. Si una pasada no hace ningún cambio, ya está todo ordenado y el Mientras termina antes. Por eso cuesta O(n) si los datos ya venían ordenados y O(n²) en el caso promedio y en el peor.

Código

bubble-sort.psc · 43 líneas
// 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 OrdenamientoBurbuja    Definir datos, n, i, j, aux, pasadas Como Entero    Definir huboCambios 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)    // En cada pasada, el mayor "sube" hasta su lugar al final    pasadas <- 0    huboCambios <- Verdadero    Mientras huboCambios Y pasadas < n - 1 Hacer        pasadas <- pasadas + 1        huboCambios <- Falso        Para j <- 1 Hasta n - pasadas Hacer            Si datos[j] > datos[j + 1] Entonces                aux <- datos[j]                datos[j] <- datos[j + 1]                datos[j + 1] <- aux                huboCambios <- Verdadero            FinSi        FinPara        // Si una pasada no cambió nada, el arreglo ya está ordenado    FinMientras    MostrarDatos("Después: ", datos, n)    Escribir "Pasadas necesarias: ", pasadasFinAlgoritmo

Diagrama de flujo

Cada bloque del diagrama corresponde a una instrucción del código.

Algoritmo OrdenamientoBurbuja
Algoritmo OrdenamientoBurbujaSíNoSíNoAlgoritmo OrdenamientoBurbujaAlgoritmo OrdenamientoBurbujaDefinir datos, n, i, j, aux, pasadas Como EnteroDefinir datos, n, i, j, aux,pasadas Como EnteroDefinir huboCambios Como LogicoDefinir huboCambios ComoLogicoEscribir "¿Cuántos números quieres ordenar? (1 a 512)"Escribir "¿Cuántos númerosquieres ordenar? (1 a 512)"Leer nLeer nDimension datos[n]Dimension datos[n]Para i <- 1 Hasta n HacerPara i <- 1 Hasta ndatos[i] <- Aleatorio(1, 99)datos[i] <- Aleatorio(1, 99)MostrarDatos("Antes: ", datos, n)MostrarDatos("Antes: ",datos, n)pasadas <- 0pasadas <- 0huboCambios <- VerdaderohuboCambios <- VerdaderoMientras huboCambios Y pasadas < n - 1 HacerhuboCambios Ypasadas < n - 1pasadas <- pasadas + 1pasadas <- pasadas + 1huboCambios <- FalsohuboCambios <- FalsoPara j <- 1 Hasta n - pasadas HacerPara j <- 1 Hasta n -pasadasSi datos[j] > datos[j + 1] Entoncesdatos[j] > datos[j +1]aux <- datos[j]aux <- datos[j]datos[j] <- datos[j + 1]datos[j] <- datos[j + 1]datos[j + 1] <- auxdatos[j + 1] <- auxhuboCambios <- VerdaderohuboCambios <- VerdaderoMostrarDatos("Después: ", datos, n)MostrarDatos("Después: ",datos, n)Escribir "Pasadas necesarias: ", pasadasEscribir "Pasadas necesarias:", pasadasFinAlgoritmoFinAlgoritmo
SubProceso MostrarDatos
SubProceso MostrarDatosSíNoSubProceso MostrarDatos(titulo, datos, n)SubProceso MostrarDatos(titulo,datos, n)Definir i Como EnteroDefinir i Como EnteroSi n <= 30 Entoncesn <= 30Escribir Sin Saltar tituloEscribir Sin Saltar tituloPara i <- 1 Hasta n HacerPara i <- 1 Hasta nEscribir Sin Saltar datos[i], " "Escribir Sin Saltar datos[i]," "Escribir ""Escribir ""Escribir titulo, n, " números (el primero es ", datos[1], " y el último ", datos[n], ")"Escribir titulo, n, " números(el primero es ", datos[1], "y el último ", datos[n], ")"FinSubProcesoFinSubProceso

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:   18 31 82 57 10 74 26 85 29 44 60 91 Después: 10 18 26 29 31 44 57 60 74 82 85 91 Pasadas necesarias: 6

Complejidad

Cuánto trabajo y memoria necesita según la cantidad de datos (n).

Complejidad
CasoCosto
MejorO(n)
PromedioO(n²)
PeorO(n²)
MemoriaO(1)

Características:EstableEn el lugar

Desafío

Ordena los números de mayor a menor.

Ver pista

Basta con cambiar el operador de comparación dentro del Si.

Abrir en Codoritmo