Código fuente en lenguaje Vala del algoritmo desordenar un vector numérico mediante la técnica "Mezcla de naipes Fisher-Yates".
Compilar y ejecutar en Linux, por ejemplo, en CentOS 7.
Pasos:
En el 2º paso, se invoca al programa ejecutable VectorNum mostrando en pantalla el vector ordenado y luego el vector desordenado.
VectorNum.vala
Copie y pegue en un editor de texto el siguiente código fuente y guarde todo en un archivo: VectorNum.vala
// Programa : VectorNum.vala
// Autor : Octulio Biletán - Febrero de 2020.
// Propósito : Desordenar/mezclar los datos de un vector numérico
// mediante el uso del algoritmo "Mezcla de naipes Fisher-Yates".
// Compilar : valac -v --Xcc=-lm VectorNum.vala
// Referencias: https://bost.ocks.org/mike/shuffle/
//
public class VectorNum
{
// Desordena el vector numérico comenzando desde atrás hacia adelante
void barajar(int[] vnum)
{
int m = vnum.length; // último elemento del vector
int t; // var. temporaria
int i; // posición del elemento elegido al azar
// Mientras queden elementos a barajar...
while(m > 0)
{
// Elige un elemento al azar...
i = (int)Math.floor(Random.next_double() * m--);
// Y lo intercambia con el elemento actual.
t = vnum[m];
vnum[m] = vnum[i];
vnum[i] = t;
}
}
// Muestra el vector numérico en pantalla
void mostrar(int[] vnum)
{
for(int i = 0; i < vnum.length; i++)
{
stdout.printf("%d, ", vnum[i]);
}
}
static int main(string[] args)
{
// Vector entrada: sus datos están ordenados.
int ventrada[] = {-1,0,1,2,3,4,5,6,7,8,9,10};
VectorNum vector = new VectorNum();
stdout.printf("Vector ordenado:\n");
vector.mostrar(ventrada);
stdout.printf("\n");
// 1º llamado
vector.barajar(ventrada);
// 2º llamado
vector.barajar(ventrada);
stdout.printf("\nVector desordenado: con dos mezclas\n");
vector.mostrar(ventrada);
stdout.printf("\n");
return 0;
}
}
Más info. sobre Vala puede encontrar en Wikipedia:
es.wikipedia.org/wiki/Vala_(lenguaje_de_programación)
Compilar y ejecutar en Linux, por ejemplo, en CentOS 7.
Pasos:
- valac -v --Xcc=-lm VectorNum.vala
- ./VectorNum
Compilación del programa VectorNum.vala |
En el 2º paso, se invoca al programa ejecutable VectorNum mostrando en pantalla el vector ordenado y luego el vector desordenado.
Desordenar datos numéricos en un vector. |
VectorNum.vala
Copie y pegue en un editor de texto el siguiente código fuente y guarde todo en un archivo: VectorNum.vala
// Programa : VectorNum.vala
// Autor : Octulio Biletán - Febrero de 2020.
// Propósito : Desordenar/mezclar los datos de un vector numérico
// mediante el uso del algoritmo "Mezcla de naipes Fisher-Yates".
// Compilar : valac -v --Xcc=-lm VectorNum.vala
// Referencias: https://bost.ocks.org/mike/shuffle/
//
public class VectorNum
{
// Desordena el vector numérico comenzando desde atrás hacia adelante
void barajar(int[] vnum)
{
int m = vnum.length; // último elemento del vector
int t; // var. temporaria
int i; // posición del elemento elegido al azar
// Mientras queden elementos a barajar...
while(m > 0)
{
// Elige un elemento al azar...
i = (int)Math.floor(Random.next_double() * m--);
// Y lo intercambia con el elemento actual.
t = vnum[m];
vnum[m] = vnum[i];
vnum[i] = t;
}
}
// Muestra el vector numérico en pantalla
void mostrar(int[] vnum)
{
for(int i = 0; i < vnum.length; i++)
{
stdout.printf("%d, ", vnum[i]);
}
}
static int main(string[] args)
{
// Vector entrada: sus datos están ordenados.
int ventrada[] = {-1,0,1,2,3,4,5,6,7,8,9,10};
VectorNum vector = new VectorNum();
stdout.printf("Vector ordenado:\n");
vector.mostrar(ventrada);
stdout.printf("\n");
// 1º llamado
vector.barajar(ventrada);
// 2º llamado
vector.barajar(ventrada);
stdout.printf("\nVector desordenado: con dos mezclas\n");
vector.mostrar(ventrada);
stdout.printf("\n");
return 0;
}
}
Más info. sobre Vala puede encontrar en Wikipedia:
es.wikipedia.org/wiki/Vala_(lenguaje_de_programación)