| 615 | } |
| 616 | |
| 617 | protected static final void merge(int[] a, double[] b, int p, int q, int r) { |
| 618 | int[] t = new int[r - p + 1]; |
| 619 | double[] v = new double[r - p + 1]; |
| 620 | int i, p1 = p, p2 = q + 1; |
| 621 | for (i = 0; p1 <= q && p2 <= r; ++i) { |
| 622 | if (a[p1] < a[p2]) { |
| 623 | v[i] = b[p1]; |
| 624 | t[i] = a[p1++]; |
| 625 | } else { |
| 626 | v[i] = b[p2]; |
| 627 | t[i] = a[p2++]; |
| 628 | } |
| 629 | } |
| 630 | for (; p1 <= q; ++p1, ++i) { |
| 631 | v[i] = b[p1]; |
| 632 | t[i] = a[p1]; |
| 633 | } |
| 634 | for (; p2 <= r; ++p2, ++i) { |
| 635 | v[i] = b[p2]; |
| 636 | t[i] = a[p2]; |
| 637 | } |
| 638 | for (i = 0, p1 = p; i < t.length; ++i, ++p1) { |
| 639 | b[p1] = v[i]; |
| 640 | a[p1] = t[i]; |
| 641 | } |
| 642 | } |
| 643 | |
| 644 | // -- int / int sorting --------------------------------------------- |
| 645 | |