NAG FL Interface
m01daf (realvec_​rank)

1 Purpose

m01daf ranks a vector of real numbers in ascending or descending order.

2 Specification

Fortran Interface
Subroutine m01daf ( rv, m1, m2, order, irank, ifail)
Integer, Intent (In) :: m1, m2
Integer, Intent (Inout) :: ifail
Integer, Intent (Out) :: irank(m2)
Real (Kind=nag_wp), Intent (In) :: rv(m2)
Character (1), Intent (In) :: order
C Header Interface
#include <nag.h>
void  m01daf_ (const double rv[], const Integer *m1, const Integer *m2, const char *order, Integer irank[], Integer *ifail, const Charlen length_order)
The routine may be called by the names m01daf or nagf_sort_realvec_rank.

3 Description

m01daf uses a variant of list-merging, as described on pages 165–166 in Knuth (1973). The routine takes advantage of natural ordering in the data, and uses a simple list insertion in a preparatory pass to generate ordered lists of length at least 10. The ranking is stable: equal elements preserve their ordering in the input data.

4 References

Knuth D E (1973) The Art of Computer Programming (Volume 3) (2nd Edition) Addison–Wesley

5 Arguments

1: rvm2 Real (Kind=nag_wp) array Input
On entry: elements m1 to m2 of rv must contain real values to be ranked.
2: m1 Integer Input
On entry: the index of the first element of rv to be ranked.
Constraint: m1>0.
3: m2 Integer Input
On entry: the index of the last element of rv to be ranked.
Constraint: m2m1.
4: order Character(1) Input
On entry: if order='A', the values will be ranked in ascending (i.e., nondecreasing) order.
If order='D', into descending order.
Constraint: order='A' or 'D'.
5: irankm2 Integer array Output
On exit: elements m1 to m2 of irank contain the ranks of the corresponding elements of rv. Note that the ranks are in the range m1 to m2: thus, if rvi is the first element in the rank order, iranki is set to m1.
6: ifail Integer Input/Output
On entry: ifail must be set to 0, -1 or 1 to set behaviour on detection of an error; these values have no effect when no error is detected.
A value of 0 causes the printing of an error message and program execution will be halted; otherwise program execution continues. A value of -1 means that an error message is printed while a value of 1 means that it is not.
If halting is not appropriate, the value -1 or 1 is recommended. If message printing is undesirable, then the value 1 is recommended. Otherwise, the value 0 is recommended. When the value -1 or 1 is used it is essential to test the value of ifail on exit.
On exit: ifail=0 unless the routine detects an error or a warning has been flagged (see Section 6).

6 Error Indicators and Warnings

If on entry ifail=0 or -1, explanatory error messages are output on the current error message unit (as defined by x04aaf).
Errors or warnings detected by the routine:
ifail=1
On entry, m1=value.
Constraint: m11.
On entry, m1=value and m2=value.
Constraint: m1m2.
On entry, m2=value.
Constraint: m21.
ifail=2
On entry, order has an illegal value: order=value.
ifail=-99
An unexpected error has been triggered by this routine. Please contact NAG.
See Section 7 in the Introduction to the NAG Library FL Interface for further information.
ifail=-399
Your licence key may have expired or may not have been installed correctly.
See Section 8 in the Introduction to the NAG Library FL Interface for further information.
ifail=-999
Dynamic memory allocation failed.
See Section 9 in the Introduction to the NAG Library FL Interface for further information.

7 Accuracy

Not applicable.

8 Parallelism and Performance

m01daf is not threaded in any implementation.

9 Further Comments

The average time taken by the routine is approximately proportional to n×logn, where n=m2-m1+1.

10 Example

This example reads a list of real numbers and ranks them in ascending order.

10.1 Program Text

Program Text (m01dafe.f90)

10.2 Program Data

Program Data (m01dafe.d)

10.3 Program Results

Program Results (m01dafe.r)