66 |
|
} |
67 |
|
|
68 |
|
static final class Sorter extends RecursiveAction { |
69 |
< |
final long[] a; |
69 |
> |
final long[] a; |
70 |
|
final long[] w; |
71 |
< |
final int origin; |
71 |
> |
final int origin; |
72 |
|
final int n; |
73 |
|
Sorter(long[] a, long[] w, int origin, int n) { |
74 |
|
this.a = a; this.w = w; this.origin = origin; this.n = n; |
96 |
|
} |
97 |
|
} |
98 |
|
} |
99 |
< |
|
99 |
> |
|
100 |
|
static final class SubSorter extends RecursiveAction { |
101 |
|
final Sorter left; |
102 |
|
final Sorter right; |
130 |
|
* and finding index of right closest to split point. |
131 |
|
* Uses left-spine decomposition to generate all |
132 |
|
* merge tasks before bottomming out at base case. |
133 |
< |
* |
133 |
> |
* |
134 |
|
*/ |
135 |
|
public void compute() { |
136 |
|
Merger rights = null; |
172 |
|
w[k++] = a[l++]; |
173 |
|
while (r < rFence) |
174 |
|
w[k++] = a[r++]; |
175 |
< |
|
175 |
> |
|
176 |
|
while (rights != null) { |
177 |
|
rights.join(); |
178 |
|
rights = rights.next; |
185 |
|
int n = a.length; |
186 |
|
for (int i = 0; i < n - 1; i++) { |
187 |
|
if (a[i] > a[i+1]) { |
188 |
< |
throw new Error("Unsorted at " + i + ": " + |
188 |
> |
throw new Error("Unsorted at " + i + ": " + |
189 |
|
a[i] + " / " + a[i+1]); |
190 |
|
} |
191 |
|
} |