qsort
 qsort | 
   
  Purpose
 
  
  Synopsis
 
 procedure qsort(sense:boolean, lvals:list)
 procedure qsort(sense:boolean, vals:array of integer|real|string)
 procedure qsort(sense:boolean, cvals:array|list of array, ndx:array)
 procedure qsort(sense:boolean, cvals:array|list of array, ndx:array, sel:set)
 procedure qsort(sense:boolean, cvals:array|list of array, lndx:list)
 procedure qsort(sense:boolean, cvals:array|list of array, lndx:list, sel:set)
 procedure qsort(sense:boolean, cmpfct:string, cmpctx:?, vals:array, ndx:array)
 procedure qsort(sense:boolean, cmpfct:string, cmpctx:?, vals:array, ndx:array, sel:set)
 procedure qsort(sense:boolean, cmpfct:string, cmpctx:?, vals:array, lndx:list)
 procedure qsort(sense:boolean, cmpfct:string, cmpctx:?, vals:array, lndx:list, sel:set)
 
  Arguments
 
 | 
     
     sense 
       | 
   
     
     Sense of the sorting:
     
    
  | 
  ||||
| 
     
     lvals 
       | 
   
     
     List to be sorted
       | 
  ||||
| 
     
     vals 
       | 
   
     
     One-dimensional array to be sorted
       | 
  ||||
| 
     
     cvals 
       | 
   
     
     One-dimensional array to be sorted or list of one-dimensional arrays
       | 
  ||||
| 
     
     cmpfct 
       | 
   
     
     The name of a comparator function of the form
     function cmpfct(cmpctx,e1,e2):integer that behaves as
     compare with
     e1 and
     e2 of the same type as the array to sort
       | 
  ||||
| 
     
     cmpctx 
       | 
   
     
     The value to be passed as the first argument to
     cmpfct (this parameter is not used by
     qsort)
       | 
  ||||
| 
     
     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 two 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.
 
 
 4. When applied to a dynamic array this procedure processes all indices of the index set including those not referring to an existing cell (a subset of the indexing set
 sel can be used to select only the existing entries).
 
 
 5. The second version of the routine can handle arrays of integers, reals and strings. Other versions also accept module types supporting ordering (like
 text or
 date for instance).
 
 
 6. When the parameter
 cvals is a list of arrays it is expected that all these arrays have one dimension and are all indiced by the same set. The list can contain up to 10 arrays. When performing the sorting the routine will use the first array values as the primary sorting criteria and then the following array in case of equality.
 
 
 7. A comparator routine may also be provided in the form of user-defined function which name is
 cmpfct (the function must be declared public). The first parameter of this function is given via
 cmpctx that can be of any scalar type (including a record), it is not used by the
 qsort algorithm but may be employed by the comparator function to store data required for the comparison. The 2 other arguments, that are of the same type as the array to sort, are the elements to compare: the function must return 0 if the 2 elements are identical, -1 if the first element is smaller or 1 otherwise. When using this form there is no restriction on the type of the array to sort.
 
 
  Module
 
 
