Mercurial > hg4j
comparison src/org/tmatesoft/hg/internal/ArrayHelper.java @ 311:b9592e21176a
Tests for array sort and reverse index building helper
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Mon, 26 Sep 2011 04:06:04 +0200 |
| parents | 237de162be28 |
| children | 6334b0267103 |
comparison
equal
deleted
inserted
replaced
| 310:237de162be28 | 311:b9592e21176a |
|---|---|
| 15 * contact TMate Software at support@hg4j.com | 15 * contact TMate Software at support@hg4j.com |
| 16 */ | 16 */ |
| 17 package org.tmatesoft.hg.internal; | 17 package org.tmatesoft.hg.internal; |
| 18 | 18 |
| 19 /** | 19 /** |
| 20 * Internal alternative to Arrays.sort to build reversed index along with sorting | |
| 20 * | 21 * |
| 21 * @author Artem Tikhomirov | 22 * @author Artem Tikhomirov |
| 22 * @author TMate Software Ltd. | 23 * @author TMate Software Ltd. |
| 23 */ | 24 */ |
| 24 public class ArrayHelper { | 25 public class ArrayHelper { |
| 30 reverse = new int[a.length]; | 31 reverse = new int[a.length]; |
| 31 sort1((Comparable<Object>[])a, 0, a.length); | 32 sort1((Comparable<Object>[])a, 0, a.length); |
| 32 for (int i = 0; i < reverse.length; i++) { | 33 for (int i = 0; i < reverse.length; i++) { |
| 33 // element that was not moved don't have an index in reverse. | 34 // element that was not moved don't have an index in reverse. |
| 34 // perhaps, can do it inside sort alg? | 35 // perhaps, can do it inside sort alg? |
| 35 // TODO tests! | 36 // Alternatively, may start with filling reverse[] array with initial indexes and |
| 37 // avoid != 0 comparisons in #swap altogether? | |
| 36 if (reverse[i] == 0) { | 38 if (reverse[i] == 0) { |
| 37 reverse[i] = i+1; | 39 reverse[i] = i+1; |
| 38 } | 40 } |
| 39 } | 41 } |
| 40 } | 42 } |
| 41 | 43 |
| 44 /** | |
| 45 * Slightly modified version of Arrays.sort1(int[], int, int) quicksort alg (just to deal with Object[]) | |
| 46 */ | |
| 42 private void sort1(Comparable<Object> x[], int off, int len) { | 47 private void sort1(Comparable<Object> x[], int off, int len) { |
| 43 // Insertion sort on smallest arrays | 48 // Insertion sort on smallest arrays |
| 44 if (len < 7) { | 49 if (len < 7) { |
| 45 for (int i=off; i<len+off; i++) | 50 for (int i=off; i<len+off; i++) |
| 46 for (int j=i; j>off && x[j-1].compareTo(x[j]) > 0; j--) | 51 for (int j=i; j>off && x[j-1].compareTo(x[j]) > 0; j--) |
