En este post te muestro cómo mezclar un arreglo en C, es decir, aleatorizarlo o randomizarlo; como le llames. De este modo al final tendremos el arreglo mezclado, ordenado de forma aleatoria.

Para lograrlo simplemente necesitamos recorrer el arreglo y en cada iteración:

  1. Obtener un índice aleatorio que esté en el rango de 0 a longitud - 1
  2. Intercambiar el elemento en el índice del ciclo por el índice aleatorio

¡Vamos allá!

Mezclar arreglo en C

He explicado el funcionamiento arriba. Comenzamos definiendo la función que nos dará un número aleatorio y alimentando a srand.

La función queda así:

// maximo y minimo son inclusivos
int aleatorio_en_rango(int minimo, int maximo) {
    return minimo + rand() / (RAND_MAX / (maximo - minimo + 1) + 1);
}

Alimentamos a srand:

srand(getpid());

Después definimos el arreglo y calculamos su longitud:

int arreglo[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int longitud =
        sizeof(arreglo) / sizeof arreglo[0];//https://parzibyte.me/blog/2018/09/21/longitud-de-un-arreglo-en-c/

Imprimimos el original para que la diferencia se note:

// Impresión
printf("Arreglo original:\n");
for (int i = 0; i < longitud; i++)printf("%d,", arreglo[i]);

Ahora sí viene la parte del algoritmo para hacer un arreglo aleatorio en C:

// Ciclo desde 0 hasta longitud de arreglo
for (int i = 0; i < longitud; i++) {
    int indiceAleatorio = aleatorio_en_rango(0, longitud - 1);
    // Intercambiar el actual con un elemento del índice aleatorio
    int temporal = arreglo[i];
    arreglo[i] = arreglo[indiceAleatorio];
    arreglo[indiceAleatorio] = temporal;
}

Obtenemos un índice aleatorio en la línea 3. Después, el valor en el índice i es respaldado temporalmente en temporal. Luego, al elemento que está en i le ponemos lo que hay en el índice aleatorio y al índice aleatorio le ponemos el temporal.

Poniendo todo junto

Mezclar arreglo en C

Al final de todo, imprimimos el arreglo que ya estará ordenado de forma aleatoria. El código completo queda así:

/**
 * Mezclar arreglo en C, es decir, hacer aleatorio, sacudir, randomizar
 * @date 2019-12-18
 * @author parzibyte
 * @see https://parzibyte.me/blog
 * */#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

// maximo y minimo son inclusivos
int aleatorio_en_rango(int minimo, int maximo) {
    return minimo + rand() / (RAND_MAX / (maximo - minimo + 1) + 1);
}

int main(void) {
    // Como queremos aleatorios, alimentamos a srand
    // https://parzibyte.me/blog/2019/03/21/obtener-numeros-aleatorios-c/
    srand(getpid());
    int arreglo[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int longitud =
            sizeof(arreglo) / sizeof arreglo[0];//https://parzibyte.me/blog/2018/09/21/longitud-de-un-arreglo-en-c/
    // Impresión
    printf("Arreglo original:\n");
    for (int i = 0; i < longitud; i++)printf("%d,", arreglo[i]);
    // Ciclo desde 0 hasta longitud de arreglo
    for (int i = 0; i < longitud; i++) {
        int indiceAleatorio = aleatorio_en_rango(0, longitud - 1);
        // Intercambiar el actual con un elemento del índice aleatorio
        int temporal = arreglo[i];
        arreglo[i] = arreglo[indiceAleatorio];
        arreglo[indiceAleatorio] = temporal;
    }
    printf("\nArreglo mezclado:\n");
    for (int i = 0; i < longitud; i++)printf("%d,", arreglo[i]);
    return 0;
}

¿Más ejercicios sobre C? click aquí.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

9 horas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

7 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

7 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

7 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

7 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

7 días hace

Esta web usa cookies.