LAPACK  3.9.0 LAPACK: Linear Algebra PACKage

## ◆ slamrg()

 subroutine slamrg ( integer N1, integer N2, real, dimension( * ) A, integer STRD1, integer STRD2, integer, dimension( * ) INDEX )

SLAMRG creates a permutation list to merge the entries of two independently sorted sets into a single set sorted in ascending order.

Download SLAMRG + dependencies [TGZ] [ZIP] [TXT]

Purpose:
``` SLAMRG will create a permutation list which will merge the elements
of A (which is composed of two independently sorted sets) into a
single set which is sorted in ascending order.```
Parameters
 [in] N1 ` N1 is INTEGER` [in] N2 ``` N2 is INTEGER These arguments contain the respective lengths of the two sorted lists to be merged.``` [in] A ``` A is REAL array, dimension (N1+N2) The first N1 elements of A contain a list of numbers which are sorted in either ascending or descending order. Likewise for the final N2 elements.``` [in] STRD1 ` STRD1 is INTEGER` [in] STRD2 ``` STRD2 is INTEGER These are the strides to be taken through the array A. Allowable strides are 1 and -1. They indicate whether a subset of A is sorted in ascending (STRDx = 1) or descending (STRDx = -1) order.``` [out] INDEX ``` INDEX is INTEGER array, dimension (N1+N2) On exit this array will contain a permutation such that if B( I ) = A( INDEX( I ) ) for I=1,N1+N2, then B will be sorted in ascending order.```
Date
June 2016

Definition at line 101 of file slamrg.f.

101 *
102 * -- LAPACK computational routine (version 3.7.0) --
103 * -- LAPACK is a software package provided by Univ. of Tennessee, --
104 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
105 * June 2016
106 *
107 * .. Scalar Arguments ..
108  INTEGER N1, N2, STRD1, STRD2
109 * ..
110 * .. Array Arguments ..
111  INTEGER INDEX( * )
112  REAL A( * )
113 * ..
114 *
115 * =====================================================================
116 *
117 * .. Local Scalars ..
118  INTEGER I, IND1, IND2, N1SV, N2SV
119 * ..
120 * .. Executable Statements ..
121 *
122  n1sv = n1
123  n2sv = n2
124  IF( strd1.GT.0 ) THEN
125  ind1 = 1
126  ELSE
127  ind1 = n1
128  END IF
129  IF( strd2.GT.0 ) THEN
130  ind2 = 1 + n1
131  ELSE
132  ind2 = n1 + n2
133  END IF
134  i = 1
135 * while ( (N1SV > 0) & (N2SV > 0) )
136  10 CONTINUE
137  IF( n1sv.GT.0 .AND. n2sv.GT.0 ) THEN
138  IF( a( ind1 ).LE.a( ind2 ) ) THEN
139  index( i ) = ind1
140  i = i + 1
141  ind1 = ind1 + strd1
142  n1sv = n1sv - 1
143  ELSE
144  index( i ) = ind2
145  i = i + 1
146  ind2 = ind2 + strd2
147  n2sv = n2sv - 1
148  END IF
149  GO TO 10
150  END IF
151 * end while
152  IF( n1sv.EQ.0 ) THEN
153  DO 20 n1sv = 1, n2sv
154  index( i ) = ind2
155  i = i + 1
156  ind2 = ind2 + strd2
157  20 CONTINUE
158  ELSE
159 * N2SV .EQ. 0
160  DO 30 n2sv = 1, n1sv
161  index( i ) = ind1
162  i = i + 1
163  ind1 = ind1 + strd1
164  30 CONTINUE
165  END IF
166 *
167  RETURN
168 *
169 * End of SLAMRG
170 *
Here is the caller graph for this function: