5 algoritmos de búsqueda y ordenamiento en PSeInt

5 algoritmos de búsqueda y ordenamiento en PSeInt con vectores: búsqueda secuencial, binaria, burbuja, selección e inserción, explicados paso a paso.

Los algoritmos de búsqueda y ordenamiento en PSeInt son una excelente forma de practicar vectores, ciclos, condicionales y comparaciones. En esta guía vemos cinco métodos clásicos aplicados sobre vectores usando posiciones desde 1.

Antes de comenzar, si necesitás repasar vectores, podés ver nuestros 20 ejercicios resueltos de PSeInt con vectores.

Índice

  1. Búsqueda secuencial
  2. Búsqueda binaria
  3. Ordenamiento burbuja
  4. Ordenamiento por selección
  5. Ordenamiento por inserción

1. Búsqueda secuencial

La búsqueda secuencial recorre el vector desde el primer elemento hasta encontrar el valor buscado o llegar al final. Es simple y funciona aunque el vector no esté ordenado.

Algoritmo BusquedaSecuencial
    Definir numeros, i, buscado, posicion Como Entero
    Definir encontrado Como Logico
    Dimension numeros[5]

    Para i <- 1 Hasta 5 Hacer
        Escribir "Ingrese el valor ", i, ":"
        Leer numeros[i]
    FinPara

    Escribir "Ingrese el valor a buscar:"
    Leer buscado

    encontrado <- Falso
    posicion <- 1

    Mientras posicion <= 5 Y NO encontrado Hacer
        Si numeros[posicion] = buscado Entonces
            encontrado <- Verdadero
        Sino
            posicion <- posicion + 1
        FinSi
    FinMientras

    Si encontrado Entonces
        Escribir "Valor encontrado en la posicion ", posicion
    Sino
        Escribir "El valor no se encuentra en el vector"
    FinSi
FinAlgoritmo

Ventaja: no necesita que los datos estén ordenados.

Desventaja: en el peor caso debe recorrer todo el vector.

2. Búsqueda binaria

La búsqueda binaria es más eficiente, pero requiere que el vector esté ordenado. En cada paso compara el valor buscado con el elemento central y descarta la mitad del vector.

Algoritmo BusquedaBinaria
    Definir numeros, buscado, izquierda, derecha, medio, posicion Como Entero
    Definir encontrado Como Logico
    Dimension numeros[8]

    numeros[1] <- 2
    numeros[2] <- 5
    numeros[3] <- 8
    numeros[4] <- 12
    numeros[5] <- 16
    numeros[6] <- 20
    numeros[7] <- 25
    numeros[8] <- 30

    Escribir "Ingrese el valor a buscar:"
    Leer buscado

    izquierda <- 1
    derecha <- 8
    encontrado <- Falso

    Mientras izquierda <= derecha Y encontrado = Falso Hacer
        medio <- Trunc((izquierda + derecha) / 2)

        Si numeros[medio] = buscado Entonces
            encontrado <- Verdadero
            posicion <- medio
        Sino
            Si buscado < numeros[medio] Entonces
                derecha <- medio - 1
            Sino
                izquierda <- medio + 1
            FinSi
        FinSi
    FinMientras

    Si encontrado Entonces
        Escribir "Valor encontrado en la posicion ", posicion
    Sino
        Escribir "El valor no se encuentra en el vector"
    FinSi
FinAlgoritmo

Importante: si el vector no está ordenado, la búsqueda binaria no garantiza un resultado correcto.

3. Ordenamiento burbuja

El método burbuja compara elementos vecinos y los intercambia cuando están en el orden incorrecto. Después de cada pasada, los valores mayores van quedando al final del vector.

Algoritmo OrdenamientoBurbuja
    Definir numeros, i, j, auxiliar Como Entero
    Dimension numeros[5]

    Para i <- 1 Hasta 5 Hacer
        Escribir "Ingrese el valor ", i, ":"
        Leer numeros[i]
    FinPara

    Para i <- 1 Hasta 4 Hacer
        Para j <- 1 Hasta 5 - i Hacer
            Si numeros[j] > numeros[j+1] Entonces
                auxiliar <- numeros[j]
                numeros[j] <- numeros[j+1]
                numeros[j+1] <- auxiliar
            FinSi
        FinPara
    FinPara

    Escribir "Vector ordenado:"

    Para i <- 1 Hasta 5 Hacer
        Escribir numeros[i]
    FinPara
FinAlgoritmo

Es uno de los métodos más fáciles de comprender, aunque no suele ser la mejor opción para grandes cantidades de datos.

4. Ordenamiento por selección

El método de selección busca el menor valor de la parte no ordenada del vector y lo coloca en la posición correspondiente.

Algoritmo OrdenamientoSeleccion
    Definir numeros, i, j, posicionMenor, auxiliar Como Entero
    Dimension numeros[5]

    Para i <- 1 Hasta 5 Hacer
        Escribir "Ingrese el valor ", i, ":"
        Leer numeros[i]
    FinPara

    Para i <- 1 Hasta 4 Hacer
        posicionMenor <- i

        Para j <- i + 1 Hasta 5 Hacer
            Si numeros[j] < numeros[posicionMenor] Entonces
                posicionMenor <- j
            FinSi
        FinPara

        Si posicionMenor <> i Entonces
            auxiliar <- numeros[i]
            numeros[i] <- numeros[posicionMenor]
            numeros[posicionMenor] <- auxiliar
        FinSi
    FinPara

    Escribir "Vector ordenado:"

    Para i <- 1 Hasta 5 Hacer
        Escribir numeros[i]
    FinPara
FinAlgoritmo

Selección realiza menos intercambios que burbuja, aunque igualmente requiere muchas comparaciones.

5. Ordenamiento por inserción

El método de inserción toma cada elemento y lo coloca en la posición correcta dentro de la parte del vector que ya está ordenada.

Algoritmo OrdenamientoInsercion
    Definir numeros, i, j, actual Como Entero
    Dimension numeros[5]

    Para i <- 1 Hasta 5 Hacer
        Escribir "Ingrese el valor ", i, ":"
        Leer numeros[i]
    FinPara

    Para i <- 2 Hasta 5 Hacer
        actual <- numeros[i]
        j <- i - 1

        Mientras j >= 1 Y numeros[j] > actual Hacer
            numeros[j+1] <- numeros[j]
            j <- j - 1
        FinMientras

        numeros[j+1] <- actual
    FinPara

    Escribir "Vector ordenado:"

    Para i <- 1 Hasta 5 Hacer
        Escribir numeros[i]
    FinPara
FinAlgoritmo

Inserción suele funcionar muy bien cuando el vector es pequeño o ya está casi ordenado.

Comparación rápida

Algoritmo Tipo Requiere datos ordenados Idea principal
Búsqueda secuencial Búsqueda No Recorrer elemento por elemento
Búsqueda binaria Búsqueda Sí Dividir el rango de búsqueda a la mitad
Burbuja Ordenamiento No Comparar elementos vecinos
Selección Ordenamiento No Buscar el menor y colocarlo en su posición
Inserción Ordenamiento No Insertar cada elemento en la parte ya ordenada

¿Cuál conviene usar?

Para aprender lógica de programación, los cinco métodos son muy útiles. La búsqueda secuencial es la más simple para empezar. Si los datos ya están ordenados, la búsqueda binaria permite encontrar valores mucho más rápido. Entre los métodos de ordenamiento, burbuja es el más fácil de visualizar, mientras que selección e inserción permiten practicar otras estrategias de recorrido e intercambio.

Seguí practicando PSeInt

También podés practicar con nuestros 20 ejercicios de vectores, los 20 ejercicios de ciclos y condicionales y los ejercicios básicos resueltos en PSeInt.


¿Te sirvió este contenido? ☕

Si esta guía te ayudó, podés apoyar a Club Programador con el monto que quieras. Tu aporte ayuda a mantener el contenido gratuito y a seguir publicando nuevos ejercicios.

🇦🇷 Apoyar desde Argentina

☕ Invitame un café con Mercado Pago

🌎 Apoyar desde otro país

☕ Apoyar con PayPal

20 ejercicios resueltos en PSeInt: ciclos y condicionales

20 ejercicios resueltos en PSeInt para practicar condicionales, ciclos Para, Mientras y Repetir, con algoritmos completos y explicaciones claras.

Practicar con ejercicios concretos es una de las mejores formas de aprender pseudocódigo. En esta guía reunimos 20 ejercicios resueltos en PSeInt centrados en condicionales y ciclos, desde problemas básicos hasta otros un poco más completos.

Todos los algoritmos están escritos con sintaxis estándar de PSeInt y pueden copiarse directamente para probarlos y modificarlos.

1. Determinar si un número es par o impar

Algoritmo ParOImpar
    Definir numero Como Entero

    Escribir "Ingrese un número:"
    Leer numero

    Si numero MOD 2 = 0 Entonces
        Escribir "El número es par"
    Sino
        Escribir "El número es impar"
    FinSi
FinAlgoritmo

Si el resto de dividir por 2 es 0, el número es par. Para ver la explicación paso a paso, casos de prueba y variantes, consultá Número par o impar en PSeInt.

2. Determinar si un número es positivo, negativo o cero

Algoritmo PositivoNegativoOCero
    Definir numero Como Real

    Escribir "Ingrese un número:"
    Leer numero

    Si numero > 0 Entonces
        Escribir "El número es positivo"
    Sino
        Si numero < 0 Entonces
            Escribir "El número es negativo"
        Sino
            Escribir "El número es cero"
        FinSi
    FinSi
FinAlgoritmo

3. Encontrar el mayor de tres números

Algoritmo MayorDeTres
    Definir a, b, c, mayor Como Real

    Escribir "Ingrese tres números:"
    Leer a
    Leer b
    Leer c

    mayor <- a

    Si b > mayor Entonces
        mayor <- b
    FinSi

    Si c > mayor Entonces
        mayor <- c
    FinSi

    Escribir "El mayor es: ", mayor
FinAlgoritmo

Inicializar mayor con el primer valor evita usar números arbitrarios como valor inicial.

4. Sumar los números del 1 hasta N

Algoritmo SumaDeUnoAN
    Definir n, i, suma Como Entero

    Escribir "Ingrese un número entero positivo:"
    Leer n

    suma <- 0

    Para i <- 1 Hasta n Hacer
        suma <- suma + i
    FinPara

    Escribir "La suma es: ", suma
FinAlgoritmo

5. Mostrar la tabla de multiplicar de un número

Algoritmo TablaDeMultiplicar
    Definir numero, i Como Entero

    Escribir "Ingrese un número:"
    Leer numero

    Para i <- 1 Hasta 10 Hacer
        Escribir numero, " x ", i, " = ", numero * i
    FinPara
FinAlgoritmo

6. Cuenta regresiva desde N hasta 1

Algoritmo CuentaRegresiva
    Definir n, i Como Entero

    Escribir "Ingrese un número entero positivo:"
    Leer n

    Para i <- n Hasta 1 Con Paso -1 Hacer
        Escribir i
    FinPara
FinAlgoritmo

7. Sumar los números pares entre 1 y N

Algoritmo SumaDePares
    Definir n, i, suma Como Entero

    Escribir "Ingrese un número entero positivo:"
    Leer n

    suma <- 0

    Para i <- 2 Hasta n Con Paso 2 Hacer
        suma <- suma + i
    FinPara

    Escribir "La suma de los pares es: ", suma
FinAlgoritmo

8. Calcular el factorial de un número

Algoritmo CalcularFactorial
    Definir n, i, fact Como Entero

    Escribir "Ingrese un número entero mayor o igual a 0:"
    Leer n

    Si n < 0 Entonces
        Escribir "El factorial no está definido para números negativos"
    Sino
        fact <- 1

        Si n > 0 Entonces
            Para i <- 1 Hasta n Hacer
                fact <- fact * i
            FinPara
        FinSi

        Escribir "El factorial es: ", fact
    FinSi
FinAlgoritmo

Para n = 0 el ciclo no realiza iteraciones y el resultado permanece en 1, que es justamente 0! = 1.

9. Contar cuántos dígitos tiene un número entero

Algoritmo CantidadDeDigitos
    Definir numero, cantidad Como Entero

    Escribir "Ingrese un número entero:"
    Leer numero

    Si numero < 0 Entonces
        numero <- -numero
    FinSi

    Si numero = 0 Entonces
        cantidad <- 1
    Sino
        cantidad <- 0

        Mientras numero > 0 Hacer
            numero <- Trunc(numero / 10)
            cantidad <- cantidad + 1
        FinMientras
    FinSi

    Escribir "Cantidad de dígitos: ", cantidad
FinAlgoritmo

10. Sumar los dígitos de un número

Algoritmo SumaDeDigitos
    Definir numero, digito, suma Como Entero

    Escribir "Ingrese un número entero:"
    Leer numero

    Si numero < 0 Entonces
        numero <- -numero
    FinSi

    suma <- 0

    Mientras numero > 0 Hacer
        digito <- numero MOD 10
        suma <- suma + digito
        numero <- Trunc(numero / 10)
    FinMientras

    Escribir "La suma de los dígitos es: ", suma
FinAlgoritmo

La idea es tomar el último dígito con MOD 10, acumularlo y eliminarlo del número. Para ver el desarrollo completo y más ejemplos, consultá Suma de dígitos de un número en PSeInt.

11. Invertir un número entero

Algoritmo InvertirNumero
    Definir numero, digito, invertido Como Entero

    Escribir "Ingrese un número entero positivo:"
    Leer numero

    invertido <- 0

    Mientras numero > 0 Hacer
        digito <- numero MOD 10
        invertido <- invertido * 10 + digito
        numero <- Trunc(numero / 10)
    FinMientras

    Escribir "Número invertido: ", invertido
FinAlgoritmo

Por ejemplo, si se ingresa 1234, el resultado será 4321.

12. Determinar si un número es capicúa

Algoritmo NumeroCapicua
    Definir numero, original, digito, invertido Como Entero

    Escribir "Ingrese un número entero no negativo:"
    Leer numero

    Si numero < 0 Entonces
        Escribir "Ingrese un número no negativo"
    Sino
        original <- numero
        invertido <- 0

        Mientras numero > 0 Hacer
            digito <- numero MOD 10
            invertido <- invertido * 10 + digito
            numero <- Trunc(numero / 10)
        FinMientras

        Si original = invertido Entonces
            Escribir "El número es capicúa"
        Sino
            Escribir "El número no es capicúa"
        FinSi
    FinSi
FinAlgoritmo

13. Determinar si un número es primo

Algoritmo NumeroPrimo
    Definir numero, divisor, cantidadDivisores Como Entero

    Escribir "Ingrese un número entero:"
    Leer numero

    Si numero < 2 Entonces
        Escribir "El número no es primo"
    Sino
        cantidadDivisores <- 0

        Para divisor <- 1 Hasta numero Hacer
            Si numero MOD divisor = 0 Entonces
                cantidadDivisores <- cantidadDivisores + 1
            FinSi
        FinPara

        Si cantidadDivisores = 2 Entonces
            Escribir "El número es primo"
        Sino
            Escribir "El número no es primo"
        FinSi
    FinSi
FinAlgoritmo

Un número primo tiene exactamente dos divisores positivos: 1 y él mismo. Para ver una explicación paso a paso y pruebas con distintos valores, consultá Número primo en PSeInt.

14. Contar los divisores de un número

Algoritmo ContarDivisores
    Definir numero, i, cantidad Como Entero

    Escribir "Ingrese un número entero positivo:"
    Leer numero

    Si numero <= 0 Entonces
        Escribir "Debe ingresar un número positivo"
    Sino
        cantidad <- 0

        Para i <- 1 Hasta numero Hacer
            Si numero MOD i = 0 Entonces
                cantidad <- cantidad + 1
            FinSi
        FinPara

        Escribir "Cantidad de divisores: ", cantidad
    FinSi
FinAlgoritmo

15. Calcular el promedio de N notas

Algoritmo PromedioDeNotas
    Definir n, i Como Entero
    Definir nota, suma, promedio Como Real

    Escribir "¿Cuántas notas desea ingresar?"
    Leer n

    Si n <= 0 Entonces
        Escribir "La cantidad debe ser mayor que cero"
    Sino
        suma <- 0

        Para i <- 1 Hasta n Hacer
            Escribir "Ingrese la nota ", i, ":"
            Leer nota
            suma <- suma + nota
        FinPara

        promedio <- suma / n
        Escribir "Promedio: ", promedio
    FinSi
FinAlgoritmo

16. Encontrar el mayor y el menor de N números

Algoritmo MayorYMenor
    Definir n, i Como Entero
    Definir numero, mayor, menor Como Real

    Escribir "¿Cuántos números desea ingresar?"
    Leer n

    Si n <= 0 Entonces
        Escribir "La cantidad debe ser mayor que cero"
    Sino
        Escribir "Ingrese el número 1:"
        Leer numero

        mayor <- numero
        menor <- numero

        Para i <- 2 Hasta n Hacer
            Escribir "Ingrese el número ", i, ":"
            Leer numero

            Si numero > mayor Entonces
                mayor <- numero
            FinSi

            Si numero < menor Entonces
                menor <- numero
            FinSi
        FinPara

        Escribir "Mayor: ", mayor
        Escribir "Menor: ", menor
    FinSi
FinAlgoritmo

El primer valor ingresado se utiliza para inicializar tanto el mayor como el menor. Así el algoritmo funciona correctamente incluso si todos los valores son negativos.

17. Contar positivos, negativos y ceros

Algoritmo ContarTiposDeNumeros
    Definir n, i, positivos, negativos, ceros Como Entero
    Definir numero Como Real

    Escribir "¿Cuántos números desea ingresar?"
    Leer n

    positivos <- 0
    negativos <- 0
    ceros <- 0

    Para i <- 1 Hasta n Hacer
        Escribir "Ingrese un número:"
        Leer numero

        Si numero > 0 Entonces
            positivos <- positivos + 1
        Sino
            Si numero < 0 Entonces
                negativos <- negativos + 1
            Sino
                ceros <- ceros + 1
            FinSi
        FinSi
    FinPara

    Escribir "Positivos: ", positivos
    Escribir "Negativos: ", negativos
    Escribir "Ceros: ", ceros
FinAlgoritmo

18. Validar una contraseña con un máximo de 3 intentos

Algoritmo ValidarContrasena
    Definir clave Como Cadena
    Definir intentos Como Entero
    Definir acceso Como Logico

    intentos <- 0
    acceso <- Falso

    Mientras intentos < 3 Y acceso = Falso Hacer
        Escribir "Ingrese la contraseña:"
        Leer clave

        intentos <- intentos + 1

        Si clave = "programar" Entonces
            acceso <- Verdadero
        Sino
            Escribir "Contraseña incorrecta"
        FinSi
    FinMientras

    Si acceso Entonces
        Escribir "Acceso permitido"
    Sino
        Escribir "Se agotaron los intentos"
    FinSi
FinAlgoritmo

19. Menú de operaciones con Segun y Repetir

Algoritmo MenuDeOperaciones
    Definir opcion Como Entero
    Definir a, b Como Real

    Repetir
        Escribir "1. Sumar"
        Escribir "2. Restar"
        Escribir "3. Salir"
        Escribir "Seleccione una opción:"
        Leer opcion

        Segun opcion Hacer
            1:
                Escribir "Ingrese dos números:"
                Leer a
                Leer b
                Escribir "Resultado: ", a + b
            2:
                Escribir "Ingrese dos números:"
                Leer a
                Leer b
                Escribir "Resultado: ", a - b
            3:
                Escribir "Fin del programa"
            De Otro Modo:
                Escribir "Opción inválida"
        FinSegun
    Hasta Que opcion = 3
FinAlgoritmo

20. Mostrar los primeros N términos de Fibonacci

Algoritmo Fibonacci
    Definir n, i, a, b, siguiente Como Entero

    Escribir "¿Cuántos términos desea mostrar?"
    Leer n

    Si n <= 0 Entonces
        Escribir "La cantidad debe ser mayor que cero"
    Sino
        a <- 0
        b <- 1

        Para i <- 1 Hasta n Hacer
            Escribir a

            siguiente <- a + b
            a <- b
            b <- siguiente
        FinPara
    FinSi
FinAlgoritmo

La secuencia generada comienza con 0, 1, 1, 2, 3, 5.... En cada iteración se muestra el término actual y luego se actualizan los dos valores necesarios para calcular el siguiente.

Cómo aprovechar estos ejercicios

No conviene limitarse a copiar y ejecutar los algoritmos. Una buena práctica consiste en probarlos con distintos valores y después modificarlos. Por ejemplo, podés cambiar límites, agregar validaciones o pedir que un mismo ejercicio se repita hasta que el usuario elija salir.

Si recién estás empezando, también te recomendamos nuestra colección de ejemplos básicos resueltos en PSeInt. Para practicar estructuras de datos, podés continuar con Arreglos en PSeInt.