LAPACK
3.9.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
*> \date June 2016
96
*
97
*> \ingroup auxOTHERcomputational
98
*
99
* =====================================================================
100
SUBROUTINE
slamrg
( N1, N2, A, STRD1, STRD2, INDEX )
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
*
171
END
slamrg
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:101
SRC
slamrg.f
Generated on Wed May 5 2021 15:10:41 for LAPACK by
1.8.16