JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / jalview / util / QuickSort.js
1 Clazz.declarePackage ("jalview.util");\r
2 Clazz.load (null, "jalview.util.QuickSort", ["java.lang.Float", "java.util.Arrays"], function () {\r
3 c$ = Clazz.declareType (jalview.util, "QuickSort");\r
4 c$.sortInt = Clazz.defineMethod (c$, "sortInt", \r
5 function (arr, s) {\r
6 jalview.util.QuickSort.sortInt (arr, 0, arr.length - 1, s);\r
7 }, "~A,~A");\r
8 c$.sortFloatObject = Clazz.defineMethod (c$, "sortFloatObject", \r
9 function (arr, s) {\r
10 jalview.util.QuickSort.sortFloat (arr, 0, arr.length - 1, s);\r
11 }, "~A,~A");\r
12 c$.sortDouble = Clazz.defineMethod (c$, "sortDouble", \r
13 function (arr, s) {\r
14 jalview.util.QuickSort.sortDouble (arr, 0, arr.length - 1, s);\r
15 }, "~A,~A");\r
16 c$.sort = Clazz.defineMethod (c$, "sort", \r
17 function (arr, s) {\r
18 jalview.util.QuickSort.stringSort (arr, 0, arr.length - 1, s);\r
19 }, "~A,~A");\r
20 c$.stringSort = Clazz.defineMethod (c$, "stringSort", \r
21  function (arr, p, r, s) {\r
22 var q;\r
23 if (p < r) {\r
24 q = jalview.util.QuickSort.stringPartition (arr, p, r, s);\r
25 jalview.util.QuickSort.stringSort (arr, p, q, s);\r
26 jalview.util.QuickSort.stringSort (arr, q + 1, r, s);\r
27 }}, "~A,~N,~N,~A");\r
28 c$.sortFloat = Clazz.defineMethod (c$, "sortFloat", \r
29  function (arr, p, r, s) {\r
30 var q;\r
31 if (p < r) {\r
32 q = jalview.util.QuickSort.partitionFloat (arr, p, r, s);\r
33 jalview.util.QuickSort.sortFloat (arr, p, q, s);\r
34 jalview.util.QuickSort.sortFloat (arr, q + 1, r, s);\r
35 }}, "~A,~N,~N,~A");\r
36 c$.sortInt = Clazz.defineMethod (c$, "sortInt", \r
37  function (arr, p, r, s) {\r
38 var q;\r
39 if (p < r) {\r
40 q = jalview.util.QuickSort.partitionInt (arr, p, r, s);\r
41 jalview.util.QuickSort.sortInt (arr, p, q, s);\r
42 jalview.util.QuickSort.sortInt (arr, q + 1, r, s);\r
43 }}, "~A,~N,~N,~A");\r
44 c$.partitionFloat = Clazz.defineMethod (c$, "partitionFloat", \r
45  function (arr, p, r, s) {\r
46 var x = arr[p];\r
47 var i = p - 1;\r
48 var j = r + 1;\r
49 while (true) {\r
50 do {\r
51 j = j - 1;\r
52 } while (arr[j] > x);\r
53 do {\r
54 i = i + 1;\r
55 } while (arr[i] < x);\r
56 if (i < j) {\r
57 var tmp = arr[i];\r
58 arr[i] = arr[j];\r
59 arr[j] = tmp;\r
60 var tmp2 = s[i];\r
61 s[i] = s[j];\r
62 s[j] = tmp2;\r
63 } else {\r
64 return j;\r
65 }}\r
66 }, "~A,~N,~N,~A");\r
67 c$.partitionInt = Clazz.defineMethod (c$, "partitionInt", \r
68  function (arr, p, r, s) {\r
69 var x = arr[p];\r
70 var i = p - 1;\r
71 var j = r + 1;\r
72 while (true) {\r
73 do {\r
74 j = j - 1;\r
75 } while (arr[j] > x);\r
76 do {\r
77 i = i + 1;\r
78 } while (arr[i] < x);\r
79 if (i < j) {\r
80 var tmp = arr[i];\r
81 arr[i] = arr[j];\r
82 arr[j] = tmp;\r
83 var tmp2 = s[i];\r
84 s[i] = s[j];\r
85 s[j] = tmp2;\r
86 } else {\r
87 return j;\r
88 }}\r
89 }, "~A,~N,~N,~A");\r
90 c$.stringPartition = Clazz.defineMethod (c$, "stringPartition", \r
91  function (arr, p, r, s) {\r
92 var x = arr[p];\r
93 var i = p - 1;\r
94 var j = r + 1;\r
95 while (true) {\r
96 do {\r
97 j = j - 1;\r
98 } while (arr[j].compareTo (x) < 0);\r
99 do {\r
100 i = i + 1;\r
101 } while (arr[i].compareTo (x) > 0);\r
102 if (i < j) {\r
103 var tmp = arr[i];\r
104 arr[i] = arr[j];\r
105 arr[j] = tmp;\r
106 var tmp2 = s[i];\r
107 s[i] = s[j];\r
108 s[j] = tmp2;\r
109 } else {\r
110 return j;\r
111 }}\r
112 }, "~A,~N,~N,~A");\r
113 c$.sortFloatChar = Clazz.defineMethod (c$, "sortFloatChar", \r
114 function (arr, s) {\r
115 var f1 =  Clazz.newFloatArray (arr.length, 0);\r
116 var s1 =  Clazz.newCharArray (s.length, '\0');\r
117 var nextZeroValue = 0;\r
118 var nextNonZeroValue = arr.length - 1;\r
119 for (var i = 0; i < arr.length; i++) {\r
120 var val = arr[i];\r
121 if (val > 0) {\r
122 f1[nextNonZeroValue] = val;\r
123 s1[nextNonZeroValue] = s[i];\r
124 nextNonZeroValue--;\r
125 } else {\r
126 f1[nextZeroValue] = val;\r
127 s1[nextZeroValue] = s[i];\r
128 nextZeroValue++;\r
129 }}\r
130 System.arraycopy (f1, 0, arr, 0, nextZeroValue);\r
131 System.arraycopy (s1, 0, s, 0, nextZeroValue);\r
132 if (nextZeroValue == arr.length) {\r
133 return;\r
134 }var nonZeroFloats = java.util.Arrays.copyOfRange (f1, nextZeroValue, f1.length);\r
135 var nonZeroChars = java.util.Arrays.copyOfRange (s1, nextZeroValue, s1.length);\r
136 jalview.util.QuickSort.externalSortFloat (nonZeroFloats, nonZeroChars);\r
137 System.arraycopy (nonZeroFloats, 0, arr, nextZeroValue, nonZeroFloats.length);\r
138 System.arraycopy (nonZeroChars, 0, s, nextZeroValue, nonZeroChars.length);\r
139 }, "~A,~A");\r
140 c$.externalSortFloat = Clazz.defineMethod (c$, "externalSortFloat", \r
141  function (arr, s) {\r
142 var length = arr.length;\r
143 var indices = jalview.util.QuickSort.makeIndexArray (length);\r
144 java.util.Arrays.sort (indices,  new jalview.util.QuickSort.FloatComparator (arr));\r
145 var sortedFloats =  Clazz.newFloatArray (length, 0);\r
146 var sortedChars =  Clazz.newCharArray (s.length, '\0');\r
147 for (var i = 0; i < length; i++) {\r
148 sortedFloats[i] = arr[indices[i]];\r
149 sortedChars[i] = s[indices[i]];\r
150 }\r
151 System.arraycopy (sortedFloats, 0, arr, 0, length);\r
152 System.arraycopy (sortedChars, 0, s, 0, s.length);\r
153 }, "~A,~A");\r
154 c$.makeIndexArray = Clazz.defineMethod (c$, "makeIndexArray", \r
155  function (length) {\r
156 var indices =  new Array (length);\r
157 for (var i = 0; i < length; i++) {\r
158 indices[i] = new Integer (i);\r
159 }\r
160 return indices;\r
161 }, "~N");\r
162 c$.sortIntChar = Clazz.defineMethod (c$, "sortIntChar", \r
163 function (arr, s) {\r
164 var f1 =  Clazz.newIntArray (arr.length, 0);\r
165 var s1 =  Clazz.newCharArray (s.length, '\0');\r
166 var nextZeroValue = 0;\r
167 var nextNonZeroValue = arr.length - 1;\r
168 for (var i = 0; i < arr.length; i++) {\r
169 var val = arr[i];\r
170 if (val > 0) {\r
171 f1[nextNonZeroValue] = val;\r
172 s1[nextNonZeroValue] = s[i];\r
173 nextNonZeroValue--;\r
174 } else {\r
175 f1[nextZeroValue] = val;\r
176 s1[nextZeroValue] = s[i];\r
177 nextZeroValue++;\r
178 }}\r
179 System.arraycopy (f1, 0, arr, 0, nextZeroValue);\r
180 System.arraycopy (s1, 0, s, 0, nextZeroValue);\r
181 if (nextZeroValue == arr.length) {\r
182 return;\r
183 }var nonZeroInts = java.util.Arrays.copyOfRange (f1, nextZeroValue, f1.length);\r
184 var nonZeroChars = java.util.Arrays.copyOfRange (s1, nextZeroValue, s1.length);\r
185 jalview.util.QuickSort.externalSortInt (nonZeroInts, nonZeroChars);\r
186 System.arraycopy (nonZeroInts, 0, arr, nextZeroValue, nonZeroInts.length);\r
187 System.arraycopy (nonZeroChars, 0, s, nextZeroValue, nonZeroChars.length);\r
188 }, "~A,~A");\r
189 c$.externalSortInt = Clazz.defineMethod (c$, "externalSortInt", \r
190  function (arr, s) {\r
191 var length = arr.length;\r
192 var indices = jalview.util.QuickSort.makeIndexArray (length);\r
193 java.util.Arrays.sort (indices,  new jalview.util.QuickSort.IntComparator (arr));\r
194 var sortedInts =  Clazz.newIntArray (length, 0);\r
195 var sortedChars =  Clazz.newCharArray (s.length, '\0');\r
196 for (var i = 0; i < length; i++) {\r
197 sortedInts[i] = arr[indices[i]];\r
198 sortedChars[i] = s[indices[i]];\r
199 }\r
200 System.arraycopy (sortedInts, 0, arr, 0, length);\r
201 System.arraycopy (sortedChars, 0, s, 0, s.length);\r
202 }, "~A,~A");\r
203 Clazz.pu$h(self.c$);\r
204 c$ = Clazz.decorateAsClass (function () {\r
205 this.values = null;\r
206 Clazz.instantialize (this, arguments);\r
207 }, jalview.util.QuickSort, "FloatComparator", null, java.util.Comparator);\r
208 Clazz.makeConstructor (c$, \r
209 function (a) {\r
210 this.values = a;\r
211 }, "~A");\r
212 Clazz.overrideMethod (c$, "compare", \r
213 function (a, b) {\r
214 return Float.compare (this.values[a.intValue ()], this.values[b]);\r
215 }, "Integer,Integer");\r
216 c$ = Clazz.p0p ();\r
217 Clazz.pu$h(self.c$);\r
218 c$ = Clazz.decorateAsClass (function () {\r
219 this.values = null;\r
220 Clazz.instantialize (this, arguments);\r
221 }, jalview.util.QuickSort, "IntComparator", null, java.util.Comparator);\r
222 Clazz.makeConstructor (c$, \r
223 function (a) {\r
224 this.values = a;\r
225 }, "~A");\r
226 Clazz.overrideMethod (c$, "compare", \r
227 function (a, b) {\r
228 return Integer.compare (this.values[a], this.values[b]);\r
229 }, "Integer,Integer");\r
230 c$ = Clazz.p0p ();\r
231 });\r