# qsort

Purpose
Sort a list or an array or (a subset of) the indices of an array.
Synopsis
`procedure qsort(sense:boolean, lvals:list of integer|real)`
`procedure qsort(sense:boolean, lvals:list of string|text)`
`procedure qsort(sense:boolean, vals:array of integer|real)`
`procedure qsort(sense:boolean, vals:array of string|text)`
`procedure qsort(sense:boolean, vals:array of integer|real, ndx:array)`
`procedure qsort(sense:boolean, vals:array of string|text, ndx:array)`
`procedure qsort(sense:boolean, vals:array of integer|real, ndx:array, sel:set)`
`procedure qsort(sense:boolean, vals:array of string|text, ndx:array, sel:set)`
`procedure qsort(sense:boolean, vals:array of integer|real, lndx:list, sel:set)`
`procedure qsort(sense:boolean, vals:array of string|text, lndx:list, sel:set)`
Arguments
sense
Sense of the sorting:
 SYS_UP Ascending order SYS_DOWN Descending order
lvals
List to be sorted
vals
One-dimensional array to be sorted
ndx
One-dimensional array of the same type and size as the indexing set of vals
lndx
List of the same type as the indexing set of vals
sel
Subset of the indexing set of vals
Example
The following example sorts an array of real numbers:
```declarations
ar: array(1..10) of real
end-declarations

ar:: [1.2, -3, -8, 10.5, 4, 7, 2.9, -1, 0, 5]
qsort(true, ar)
writeln("Sorted array: ", ar)```
Further information
1. In the first four versions of the procedure (with two arguments, sense and vals or lvals) the input array (list) vals (lvals) is overwritten by the resulting sorted array (list).
2. When an array ndx is provided, the resulting sorted array is returned in the argument ndx in the form of its sorted index set. If a selection set sel of indices is provided, only the specified indices are processed.
3. When a list lndx is provided, the resulting sorted array is returned in the argument lndx in the form of a list of sorted indices. If a selection set sel of indices is provided, only the specified indices are processed.
Module