Mezclar arreglo en C
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:
0
a longitud - 1
¡Vamos allá!
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.
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í.
En este post te quiero compartir un código de C++ para listar y cancelar trabajos…
Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…
Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…
Esta semana estuve recreando la API del plugin para impresoras térmicas en Android (HTTP a…
Hoy te enseñaré a extraer la cadena base64 de una clave PEM usando una función…
Encender un foco con un Bot de Telegram es posible usando una tarjeta como la…
Esta web usa cookies.