domingo, 1 de marzo de 2020

Desordenar un vector numérico - codigo fuente -

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:
  1. valac -v --Xcc=-lm VectorNum.vala
  2. ./VectorNum
En el 1º paso, compila el programa VectorNum.vala produciendo el programa ejecutable.
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)