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/posts/longitud-de-un-arreglo-en-c/](https://parzibyte.me/blog/posts/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
 * 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/posts/obtener-numeros-aleatorios-c/](https://parzibyte.me/blog/posts/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/posts/longitud-de-un-arreglo-en-c/](https://parzibyte.me/blog/posts/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í.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto