annotate src/sort.cc @ 1826:b14829582cc4

[project @ 1996-02-02 03:05:07 by jwe]
author jwe
date Fri, 02 Feb 1996 03:07:27 +0000
parents fe9d3b2ded26
children e62277bf5fe0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
1 // f-sort.cc -*- C++ -*-
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
2 /*
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
3
1009
dfe01093f657 [project @ 1995-01-04 04:05:12 by jwe]
jwe
parents: 777
diff changeset
4 Copyright (C) 1994, 1995 John W. Eaton
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
5
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
7
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
11 later version.
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
12
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
16 for more details.
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
17
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, write to the Free
1315
611d403c7f3d [project @ 1995-06-25 19:56:32 by jwe]
jwe
parents: 1192
diff changeset
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
21
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
22 */
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
23
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
24 #ifdef HAVE_CONFIG_H
1192
b6360f2d4fa6 [project @ 1995-03-30 21:38:35 by jwe]
jwe
parents: 1009
diff changeset
25 #include <config.h>
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
26 #endif
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
27
1352
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1315
diff changeset
28 #include "defun-dld.h"
777
a2f9d3fd720c [project @ 1994-10-07 14:01:53 by jwe]
jwe
parents: 712
diff changeset
29 #include "error.h"
a2f9d3fd720c [project @ 1994-10-07 14:01:53 by jwe]
jwe
parents: 712
diff changeset
30 #include "gripes.h"
544
20fbad23ae51 [project @ 1994-07-22 05:04:44 by jwe]
jwe
parents: 519
diff changeset
31 #include "help.h"
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1684
diff changeset
32 #include "oct-obj.h"
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
33
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
34 // This is algorithm 5.2.4L from Knuth, Volume 3.
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
35
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
36 // XXX FIXME XXX -- there is way too much duplicated code here given
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
37 // that the sort algorithms are all the same, and only the type of the
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
38 // data and the comparison changes...
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
39 //
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
40 // Maybe some cpp abuse will make it better.
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
41
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
42 static Array<int>
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
43 create_index_array (int n)
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
44 {
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
45 Array<int> l (n+1);
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
46
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
47 l.elem (0) = 1;
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
48
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
49 for (int i = 1; i < n - 1; i++)
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
50 l.elem (i) = -(i+2);
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
51
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
52 l.elem (n-1) = 0;
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
53 l.elem (n) = 0;
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
54 l.elem (n+1) = 2;
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
55
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
56 return l;
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
57 }
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
58
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
59 #define SORT_INIT_PHASE(n) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
60 int s = 0; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
61 int t = n + 1; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
62 int p = l.elem (s); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
63 int q = l.elem (t); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
64 if (q == 0) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
65 break
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
66
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
67 #define SORT_COMMON_CODE \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
68 p = -p; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
69 q = -q; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
70 if (q == 0) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
71 { \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
72 l.elem (s) = (l.elem (s) < 0) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
73 ? ((p < 0) ? p : -p) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
74 : ((p >= 0) ? p : -p); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
75 l.elem (t) = 0; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
76 break; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
77 } \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
78
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
79 #define SORT_REORDER_PHASE_ONE \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
80 l.elem (s) = (l.elem (s) < 0) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
81 ? ((q < 0) ? q : -q) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
82 : ((q >= 0) ? q : -q); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
83 s = q; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
84 q = l.elem (q); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
85 if (q <= 0) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
86 { \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
87 l.elem (s) = p; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
88 s = t; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
89 do \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
90 { \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
91 t = p; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
92 p = l.elem (p); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
93 } \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
94 while (p > 0); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
95 SORT_COMMON_CODE; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
96 } \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
97
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
98 #define SORT_REORDER_PHASE_TWO \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
99 l.elem (s) = (l.elem (s) < 0) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
100 ? ((p < 0) ? p : -p) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
101 : ((p >= 0) ? p : -p); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
102 s = p; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
103 p = l.elem (p); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
104 if (p <= 0) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
105 { \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
106 l.elem (s) = q; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
107 s = t; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
108 do \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
109 { \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
110 t = q; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
111 q = l.elem (q); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
112 } \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
113 while (q > 0); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
114 SORT_COMMON_CODE; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
115 }
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
116
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
117 #define DO_SORT(n, condition) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
118 while (1) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
119 { \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
120 SORT_INIT_PHASE(n); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
121 while (1) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
122 { \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
123 if (condition) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
124 { \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
125 SORT_REORDER_PHASE_ONE; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
126 } \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
127 else \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
128 { \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
129 SORT_REORDER_PHASE_TWO; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
130 } \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
131 } \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
132 }
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
133
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
134 #define VECTOR_CREATE_RETURN_VALUES(vs, v) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
135 int k = l.elem (0); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
136 idx.elem (0) = k; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
137 vs.elem (0) = v.elem (k-1); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
138 for (int i = 1; i < n; i++) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
139 { \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
140 k = l.elem ((int) idx.elem (i-1)); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
141 idx.elem (i) = k; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
142 vs.elem (i) = v.elem (k-1); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
143 }
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
144
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
145 #define MATRIX_CREATE_RETURN_VALUES(ms, m) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
146 int k = l.elem (0); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
147 idx.elem (0, j) = k; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
148 ms.elem (0, j) = m.elem (k-1, j); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
149 for (int i = 1; i < nr; i++) \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
150 { \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
151 k = l.elem ((int) idx.elem (i-1, j)); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
152 idx.elem (i, j) = k; \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
153 ms.elem (i, j) = m.elem (k-1, j); \
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
154 }
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
155
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
156 static Octave_object
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
157 mx_sort (const Matrix& m)
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
158 {
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
159 Octave_object retval;
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
160
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
161 int nr = m.rows ();
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
162 int nc = m.columns ();
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
163
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
164 Matrix ms (nr, nc);
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
165 Matrix idx (nr, nc);
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
166
1563
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
167 if (nr == 1 && nc > 0)
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
168 {
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
169 retval (1) = Matrix (nr, nc, 1.0);
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
170 retval (0) = m;
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
171
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
172 return retval;
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
173 }
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
174 else if (nr > 1 && nc > 0)
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
175 {
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
176 for (int j = 0; j < nc; j++)
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
177 {
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
178 Array<int> l = create_index_array (nr);
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
179
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
180 DO_SORT (nr, (m.elem (p-1, j) > m.elem (q-1, j)));
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
181
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
182 MATRIX_CREATE_RETURN_VALUES (ms, m);
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
183 }
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
184 }
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
185
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
186 retval (1) = idx;
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
187 retval (0) = ms;
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
188
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
189 return retval;
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
190 }
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
191
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
192 static Octave_object
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
193 mx_sort (const RowVector& v)
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
194 {
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
195 Octave_object retval;
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
196
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
197 int n = v.capacity ();
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
198
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
199 RowVector vs (n);
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
200 RowVector idx (n);
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
201
1563
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
202 if (n == 1)
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
203 {
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
204 retval (1) = RowVector (n, 1.0);
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
205 retval (0) = v;
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
206
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
207 return retval;
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
208 }
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
209 else if (n > 1)
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
210 {
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
211 Array<int> l = create_index_array (n);
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
212
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
213 DO_SORT (n, (v.elem (p-1) > v.elem (q-1)));
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
214
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
215 VECTOR_CREATE_RETURN_VALUES (vs, v);
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
216 }
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
217
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
218 retval (1) = tree_constant (idx, 0);
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
219 retval (0) = tree_constant (vs, 0);
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
220
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
221 return retval;
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
222 }
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
223
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
224 static Octave_object
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
225 mx_sort (const ComplexMatrix& cm)
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
226 {
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
227 Octave_object retval;
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
228
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
229 int nr = cm.rows ();
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
230 int nc = cm.columns ();
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
231
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
232 ComplexMatrix cms (nr, nc);
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
233 Matrix idx (nr, nc);
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
234
1563
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
235 if (nr == 1 && nc > 0)
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
236 {
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
237 retval (1) = Matrix (nr, nc, 1.0);
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
238 retval (0) = cm;
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
239
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
240 return retval;
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
241 }
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
242 else if (nr > 1 && nc > 0)
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
243 {
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
244 for (int j = 0; j < nc; j++)
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
245 {
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
246 Array<int> l = create_index_array (nr);
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
247
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
248 int all_elts_real = 1;
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
249 for (int i = 0; i < nr; i++)
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
250 if (imag (cm.elem (i, j)) != 0.0)
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
251 {
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
252 all_elts_real = 0;
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
253 break;
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
254 }
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
255
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
256 DO_SORT (nr, ((all_elts_real
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
257 && real (cm.elem (p-1, j)) > real (cm.elem (q-1, j)))
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
258 || abs (cm.elem (p-1, j)) > abs (cm.elem (q-1, j))));
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
259
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
260 MATRIX_CREATE_RETURN_VALUES (cms, cm);
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
261 }
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
262 }
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
263
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
264 retval (1) = idx;
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
265 retval (0) = cms;
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
266
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
267 return retval;
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
268 }
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
269
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
270 static Octave_object
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
271 mx_sort (ComplexRowVector& cv)
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
272 {
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
273 Octave_object retval;
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
274
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
275 int n = cv.capacity ();
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
276
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
277 ComplexRowVector cvs (n);
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
278 RowVector idx (n);
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
279
1563
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
280 if (n == 1)
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
281 {
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
282 retval (1) = RowVector (n, 1.0);
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
283 retval (0) = cv;
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
284
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
285 return retval;
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
286 }
562fed28ce22 [project @ 1995-10-15 03:29:14 by jwe]
jwe
parents: 1488
diff changeset
287 else if (n > 1)
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
288 {
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
289 Array<int> l = create_index_array (n);
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
290
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
291 int all_elts_real = 1;
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
292 for (int i = 0; i < n; i++)
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
293 if (imag (cv.elem (i)) != 0.0)
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
294 {
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
295 all_elts_real = 0;
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
296 break;
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
297 }
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
298
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
299 DO_SORT (n, ((all_elts_real
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
300 && real (cv.elem (p-1)) > real (cv.elem (q-1)))
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
301 || abs (cv.elem (p-1)) > abs (cv.elem (q-1))));
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
302
1387
f78531791439 [project @ 1995-09-14 06:57:58 by jwe]
jwe
parents: 1386
diff changeset
303 VECTOR_CREATE_RETURN_VALUES (cvs, cv);
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
304 }
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
305
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
306 retval (1) = tree_constant (idx, 0);
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
307 retval (0) = tree_constant (cvs, 0);
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
308
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
309 return retval;
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
310 }
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
311
1684
f85887dfe06c [project @ 1995-12-30 03:46:07 by jwe]
jwe
parents: 1563
diff changeset
312 DEFUN_DLD_BUILTIN ("sort", Fsort, Ssort, FSsort, 11,
519
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 515
diff changeset
313 "[S, I] = sort (X)\n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 515
diff changeset
314 \n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 515
diff changeset
315 sort the columns of X, optionally return sort index")
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
316 {
519
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 515
diff changeset
317 Octave_object retval;
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 515
diff changeset
318
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 515
diff changeset
319 int nargin = args.length ();
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
320
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 701
diff changeset
321 if (nargin != 1)
519
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 515
diff changeset
322 {
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 515
diff changeset
323 print_usage ("sort");
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 515
diff changeset
324 return retval;
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 515
diff changeset
325 }
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
326
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
327 int return_idx = nargout > 1;
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
328 if (return_idx)
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
329 retval.resize (2);
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
330 else
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
331 retval.resize (1);
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
332
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 701
diff changeset
333 tree_constant arg = args(0);
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 544
diff changeset
334
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
335 if (arg.is_real_type ())
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 544
diff changeset
336 {
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
337 Matrix m = arg.matrix_value ();
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
338
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
339 if (! error_state)
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 544
diff changeset
340 {
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
341 if (m.rows () == 1)
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
342 {
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
343 int nc = m.columns ();
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
344 RowVector v (nc);
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
345 for (int i = 0; i < nc; i++)
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
346 v.elem (i) = m.elem (0, i);
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
347
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
348 retval = mx_sort (v);
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
349 }
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
350 else
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
351 retval = mx_sort (m);
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 544
diff changeset
352 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 544
diff changeset
353 }
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
354 else if (arg.is_complex_type ())
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 544
diff changeset
355 {
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
356 ComplexMatrix cm = arg.complex_matrix_value ();
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
357
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
358 if (! error_state)
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 544
diff changeset
359 {
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
360 if (cm.rows () == 1)
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
361 {
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
362 int nc = cm.columns ();
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
363 ComplexRowVector cv (nc);
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
364 for (int i = 0; i < nc; i++)
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
365 cv.elem (i) = cm.elem (0, i);
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
366
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
367 retval = mx_sort (cv);
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
368 }
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 628
diff changeset
369 else
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
370 retval = mx_sort (cm);
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 544
diff changeset
371 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 544
diff changeset
372 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 544
diff changeset
373 else
1386
588cad732153 [project @ 1995-09-14 05:54:05 by jwe]
jwe
parents: 1357
diff changeset
374 gripe_wrong_type_arg ("sort", arg);
515
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
375
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
376 return retval;
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
377 }
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
378
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
379 /*
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
380 ;;; Local Variables: ***
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
381 ;;; mode: C++ ***
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
382 ;;; page-delimiter: "^/\\*" ***
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
383 ;;; End: ***
e078f05f4aac [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents:
diff changeset
384 */