LAPACK  3.10.0
LAPACK: Linear Algebra PACKage
slamrg.f
Go to the documentation of this file.
1 *> \brief \b SLAMRG creates a permutation list to merge the entries of two independently sorted sets into a single set sorted in ascending order.
2 *
3 * =========== DOCUMENTATION ===========
4 *
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
7 *
8 *> \htmlonly
9 *> Download SLAMRG + dependencies
10 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/slamrg.f">
11 *> [TGZ]</a>
12 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/slamrg.f">
13 *> [ZIP]</a>
14 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slamrg.f">
15 *> [TXT]</a>
16 *> \endhtmlonly
17 *
18 * Definition:
19 * ===========
20 *
21 * SUBROUTINE SLAMRG( N1, N2, A, STRD1, STRD2, INDEX )
22 *
23 * .. Scalar Arguments ..
24 * INTEGER N1, N2, STRD1, STRD2
25 * ..
26 * .. Array Arguments ..
27 * INTEGER INDEX( * )
28 * REAL A( * )
29 * ..
30 *
31 *
32 *> \par Purpose:
33 * =============
34 *>
35 *> \verbatim
36 *>
37 *> SLAMRG will create a permutation list which will merge the elements
38 *> of A (which is composed of two independently sorted sets) into a
39 *> single set which is sorted in ascending order.
40 *> \endverbatim
41 *
42 * Arguments:
43 * ==========
44 *
45 *> \param[in] N1
46 *> \verbatim
47 *> N1 is INTEGER
48 *> \endverbatim
49 *>
50 *> \param[in] N2
51 *> \verbatim
52 *> N2 is INTEGER
53 *> These arguments contain the respective lengths of the two
54 *> sorted lists to be merged.
55 *> \endverbatim
56 *>
57 *> \param[in] A
58 *> \verbatim
59 *> A is REAL array, dimension (N1+N2)
60 *> The first N1 elements of A contain a list of numbers which
61 *> are sorted in either ascending or descending order. Likewise
62 *> for the final N2 elements.
63 *> \endverbatim
64 *>
65 *> \param[in] STRD1
66 *> \verbatim
67 *> STRD1 is INTEGER
68 *> \endverbatim
69 *>
70 *> \param[in] STRD2
71 *> \verbatim
72 *> STRD2 is INTEGER
73 *> These are the strides to be taken through the array A.
74 *> Allowable strides are 1 and -1. They indicate whether a
75 *> subset of A is sorted in ascending (STRDx = 1) or descending
76 *> (STRDx = -1) order.
77 *> \endverbatim
78 *>
79 *> \param[out] INDEX
80 *> \verbatim
81 *> INDEX is INTEGER array, dimension (N1+N2)
82 *> On exit this array will contain a permutation such that
83 *> if B( I ) = A( INDEX( I ) ) for I=1,N1+N2, then B will be
84 *> sorted in ascending order.
85 *> \endverbatim
86 *
87 * Authors:
88 * ========
89 *
90 *> \author Univ. of Tennessee
91 *> \author Univ. of California Berkeley
92 *> \author Univ. of Colorado Denver
93 *> \author NAG Ltd.
94 *
95 *> \ingroup auxOTHERcomputational
96 *
97 * =====================================================================
98  SUBROUTINE slamrg( N1, N2, A, STRD1, STRD2, INDEX )
99 *
100 * -- LAPACK computational routine --
101 * -- LAPACK is a software package provided by Univ. of Tennessee, --
102 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
103 *
104 * .. Scalar Arguments ..
105  INTEGER N1, N2, STRD1, STRD2
106 * ..
107 * .. Array Arguments ..
108  INTEGER INDEX( * )
109  REAL A( * )
110 * ..
111 *
112 * =====================================================================
113 *
114 * .. Local Scalars ..
115  INTEGER I, IND1, IND2, N1SV, N2SV
116 * ..
117 * .. Executable Statements ..
118 *
119  n1sv = n1
120  n2sv = n2
121  IF( strd1.GT.0 ) THEN
122  ind1 = 1
123  ELSE
124  ind1 = n1
125  END IF
126  IF( strd2.GT.0 ) THEN
127  ind2 = 1 + n1
128  ELSE
129  ind2 = n1 + n2
130  END IF
131  i = 1
132 * while ( (N1SV > 0) & (N2SV > 0) )
133  10 CONTINUE
134  IF( n1sv.GT.0 .AND. n2sv.GT.0 ) THEN
135  IF( a( ind1 ).LE.a( ind2 ) ) THEN
136  index( i ) = ind1
137  i = i + 1
138  ind1 = ind1 + strd1
139  n1sv = n1sv - 1
140  ELSE
141  index( i ) = ind2
142  i = i + 1
143  ind2 = ind2 + strd2
144  n2sv = n2sv - 1
145  END IF
146  GO TO 10
147  END IF
148 * end while
149  IF( n1sv.EQ.0 ) THEN
150  DO 20 n1sv = 1, n2sv
151  index( i ) = ind2
152  i = i + 1
153  ind2 = ind2 + strd2
154  20 CONTINUE
155  ELSE
156 * N2SV .EQ. 0
157  DO 30 n2sv = 1, n1sv
158  index( i ) = ind1
159  i = i + 1
160  ind1 = ind1 + strd1
161  30 CONTINUE
162  END IF
163 *
164  RETURN
165 *
166 * End of SLAMRG
167 *
168  END
subroutine slamrg(N1, N2, A, STRD1, STRD2, INDEX)
SLAMRG creates a permutation list to merge the entries of two independently sorted sets into a single...
Definition: slamrg.f:99