SVIGP

Sorts an integer array by algebraically increasing value and return the permutation that rearranges the array.

Required Arguments

IA — Integer vector of length N containing the array to be sorted. (Input)

IB — Integer vector of length N containing the sorted array. (Output)

If IA is not needed, IA and IB can share the same storage locations.

If IA is not needed, IA and IB can share the same storage locations.

IPERM — Vector of length N. (Input/Output)

On input, IPERM should be initialized to the values 1, 2, …, N. On output, IPERM contains a record of permutations made on the vector IA.

On input, IPERM should be initialized to the values 1, 2, …, N. On output, IPERM contains a record of permutations made on the vector IA.

Optional Arguments

N — Number of elements in the array to be sorted. (Input)

Default: N = size (IPERM,1).

Default: N = size (IPERM,1).

FORTRAN 90 Interface

Generic: CALL SVIGP (IA, IB, IPERM [, …])

Specific: The specific interface name is S_SVIGP.

FORTRAN 77 Interface

Single: CALL SVIGP (N, IA, IB, IPERM)

Description

Routine SVIGP sorts the elements of an integer array, A, into ascending order by algebraic value, keeping a record in P of the permutations to the array A. That is, the elements of P are moved in the same manner as are the elements in A as A is being sorted. The routine SVIGP uses the algorithm discussed in SVRGN. On completion, Aj ≤ Ai for j < i.

Comments

1. For wider applicability, integers (1, 2, …, N) that are to be associated with IA(I) for I = 1, 2, …, N may be entered into IPERM(I) in any order. Note that these integers must be unique.

Example

This example sorts the 10-element array IA algebraically.

USE SVIGP_INT

USE UMACH_INT

IMPLICIT NONE

! Declare variables

INTEGER N, J, NOUT

PARAMETER (N=10)

INTEGER IA(N), IB(N), IPERM(N)

! Set values for IA and IPERM

! IA = ( 10 -9 8 -7 6 5 4 -3 -2 -1 )

!

! IPERM = ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 )

!

DATA IA/10, -9, 8, -7, 6, 5, 4, -3, -2, -1/

DATA IPERM/1, 2, 3, 4, 5, 6, 7, 8, 9, 10/

! Sort IA by algebraic value into IB

CALL SVIGP (IA, IB, IPERM)

! Print results

CALL UMACH (2,NOUT)

WRITE (NOUT, 99998) (IB(J),J=1,N)

WRITE (NOUT, 99999) (IPERM(J),J=1,N)

!

99998 FORMAT (' The output vector is:', /, 10(1X,I5))

99999 FORMAT (' The permutation vector is:', /, 10(1X,I5))

END

Output

The Output vector is:

-9 -7 -3 -2 -1 4 5 6 8 10

The permutation vector is:

2 4 8 9 10 7 6 5 3 1