NAG C Library Function Document

nag_reorder_vector (m01esc)

1
Purpose

nag_reorder_vector (m01esc) rearranges a vector of arbitrary type data objects into the order specified by a vector of indices.

2
Specification

#include <nag.h>
#include <nagm01.h>
void  nag_reorder_vector (Pointer vec, size_t n, size_t size, ptrdiff_t stride, size_t indices[], NagError *fail)

3
Description

nag_reorder_vector (m01esc) uses a variant of list merging as described by Knuth (1973). The function rearranges a set of n  data objects of arbitrary type, which are stored in an array at intervals of length stride, into the order specified by an array of indices.

4
References

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

5
Arguments

1:     vec[n] Pointer Input/Output
On entry: the array of objects to be rearranged.
On exit: the objects rearranged according to array indices.
2:     n size_tInput
On entry: the number, n , of objects to be rearranged.
Constraint: 0nMAX_LENGTH, where MAX_LENGTH is an implementation-dependent value for the maximum size of an array.
3:     size size_tInput
On entry: the size of each object to be rearranged.
Constraint: 1sizep, where p is an implementation-dependent value for the maximum size_t size on the system, divided by n if n is positive.
4:     stride ptrdiff_tInput
On entry: the increment between data items in vec to be rearranged.
Note: if stride is positive, vec should point at the first data object; otherwise vec should point at the last data object.
Constraint: sizestridep, where p is an implementation-dependent value for the maximum size_t size on the system, divided by n if n is positive.
5:     indices[n] size_tInput
On entry: the indices specifying the order in which the elements of vector are to be rearranged.
6:     fail NagError *Input/Output
The NAG error argument (see Section 3.7 in How to Use the NAG Library and its Documentation).

6
Error Indicators and Warnings

NE_2_INT_ARG_LT
On entry, stride = value while size=value . These arguments must satisfy stride size .
NE_ALLOC_FAIL
Dynamic memory allocation failed.
NE_BAD_RANK
Invalid indices vector.
NE_INT_ARG_GT
On entry, n=value.
Constraint: nvalue, an implementation-dependent size that is printed in the error message.
On entry, size=value.
Constraint: sizevalue, an implementation-dependent size that is printed in the error message.
On entry, stride=value.
Constraint: stridevalue, an implementation-dependent size that is printed in the error message.
NE_INT_ARG_LT
On entry, n=value.
Constraint: n0.
On entry, size=value.
Constraint: size1.

7
Accuracy

Not applicable.

8
Parallelism and Performance

nag_reorder_vector (m01esc) is not threaded in any implementation.

9
Further Comments

The average time taken by the function is approximately proportional to n.

10
Example

The example program.

10.1
Program Text

Program Text (m01esce.c)

10.2
Program Data

Program Data (m01esce.d)

10.3
Program Results

Program Results (m01esce.r)