- publishing free software manuals
 GNU Scientific Library Reference Manual - Third Edition (v1.12) by M. Galassi, J. Davies, J. Theiler, B. Gough, G. Jungman, P. Alken, M. Booth, F. RossiPaperback (6"x9"), 592 pages, 60 figuresISBN 0954612078RRP £24.95 (\$39.95)

## 11.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 ("%d smallest values from %d\n", k, N);

for (i = 0; i < k; i++)
{
printf ("%d: %.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
```
 ISBN 0954612078 GNU Scientific Library Reference Manual - Third Edition (v1.12) See the print edition