The functions described in this section select the @math{k}-th smallest or largest elements of a data set of size @math{N}. The routines use an @math{O(kN)} direct insertion algorithm which is suited to subsets that are small compared with the total size of the dataset. For example, the routines are useful for selecting the 10 largest values from one million data points, but not for selecting the largest 100,000 values. If the subset is a significant part of the total dataset it may be faster to sort all the elements of the dataset directly with an @math{O(N \log N)} algorithm and obtain the smallest or largest values that way.

__Function:__void**gsl_sort_smallest***(double **`dest`, size_t`k`, const double *`src`, size_t`stride`, size_t`n`)-
This function copies the
`k`-th smallest elements of the array`src`, of size`n`and stride`stride`, in ascending numerical order in`dest`. The size of the subset`k`must be less than or equal to`n`. The data`src`is not modified by this operation.

__Function:__void**gsl_sort_largest***(double **`dest`, size_t`k`, const double *`src`, size_t`stride`, size_t`n`)-
This function copies the
`k`-th largest elements of the array`src`, of size`n`and stride`stride`, in descending numerical order in`dest`. The size of the subset`k`must be less than or equal to`n`. The data`src`is not modified by this operation.

__Function:__void**gsl_sort_vector_smallest***(double **`dest`, size_t`k`, const gsl_vector *`v`)__Function:__void**gsl_sort_vector_largest***(double **`dest`, size_t`k`, const gsl_vector *`v`)-
These functions copy the
`k`-th smallest or largest elements of the vector`v`into the array`dest`. The size of the subset`k`must be less than or equal to the length of the vector`v`.

The following functions find the indices of the @math{k}-th smallest or largest elements of a dataset,

__Function:__void**gsl_sort_smallest_index***(size_t **`p`, size_t`k`, const double *`src`, size_t`stride`, size_t`n`)-
This function stores the indices of the
`k`-th smallest elements of the array`src`, of size`n`and stride`stride`, in the array`p`. The indices are chosen so that the corresponding data is in ascending numerical order. The size of the subset`k`must be less than or equal to`n`. The data`src`is not modified by this operation.

__Function:__void**gsl_sort_largest_index***(size_t **`p`, size_t`k`, const double *`src`, size_t`stride`, size_t`n`)-
This function stores the indices of the
`k`-th largest elements of the array`src`, of size`n`and stride`stride`, in the array`p`. The indices are chosen so that the corresponding data is in descending numerical order. The size of the subset`k`must be less than or equal to`n`. The data`src`is not modified by this operation.

__Function:__void**gsl_sort_vector_smallest_index***(size_t **`p`, size_t`k`, const gsl_vector *`v`)__Function:__void**gsl_sort_vector_largest_index***(size_t **`p`, size_t`k`, const gsl_vector *`v`)-
These functions store the indices of
`k`-th smallest or largest elements of the vector`v`in the array`p`. The size of the subset`k`must be less than or equal to the length of the vector`v`.

Go to the first, previous, next, last section, table of contents.