### 12.5 Examples

The following example shows how to use the permutation p to print the elements of the vector v in ascending order,

    gsl_sort_vector_index (p, v);

    for (i = 0; i < v->size; i++)
    {
        double vpi = gsl_vector_get (v, p->data[i]);
        printf ("order = %d, value = %g\n", i, vpi);
    }

The next example uses the function `gsl_sort_smallest` to select the 5 smallest numbers from 100000 uniform random variates stored in an array,

    #include <gsl/gsl_rng.h>
    #include <gsl/gsl_sort_double.h>

    int
    main (void)
    {
      const gsl_rng_type * T;
      gsl_rng * r;

      size_t i, k = 5, N = 100000;

      double * x = malloc (N * sizeof(double));
      double * small = malloc (k * sizeof(double));

      gsl_rng_env_setup();

      T = gsl_rng_default;
      r = gsl_rng_alloc (T);

      for (i = 0; i < N; i++)
        {
          x[i] = gsl_rng_uniform(r);
        }

      gsl_sort_smallest (small, k, x, 1, N);

      printf ("%zu smallest values from %zu\n", k, N);

      for (i = 0; i < k; i++)
        {
          printf ("%zu: %.18f\n", i, small[i]);
        }

      free (x);
      free (small);
      gsl_rng_free (r);
      return 0;
    }

The output lists the 5 smallest values, in ascending order,

    $ ./a.out

    5 smallest values from 100000
    0: 0.000003489200025797
    1: 0.000008199829608202
    2: 0.000008953968062997
    3: 0.000010712770745158
    4: 0.000033531803637743