Java tutorial
import java.util.TreeMap; /** * <p>Static methods for doing useful math</p><hr> * * @author : $Author: brian $ * @version : $Revision: 1.1 $ * * <hr><p><font size="-1" color="#336699"><a href="http://www.mbari.org"> * The Monterey Bay Aquarium Research Institute (MBARI)</a> provides this * documentation and code "as is", with no warranty, express or * implied, of its quality or consistency. It is provided without support and * without obligation on the part of MBARI to assist in its use, correction, * modification, or enhancement. This information should not be published or * distributed to third parties without specific written permission from * MBARI.</font></p><br> * * <font size="-1" color="#336699">Copyright 2002 MBARI.<br> * MBARI Proprietary Information. All rights reserved.</font><br><hr><br> * */ public class Util { /** * Returns an array of indices indicating the order the data should be sorted * in. Duplicate values are discarded with the first one being kept. This method * is useful when a number of data arrays have to be sorted based on the values in * some coordinate array, such as time. * * To convert a array of values to a sorted monooic array try: <br> * double[] x; // some 1-D array of data <br> * int[] i = MathUtilities.uniqueSort(x); <br> * double[] xSorted = MathUtilities.orderVector(x, i);<br><br> * * @param x An array of data that is to be sorted. * @return order An array of indexes such that y = Array.sort(x) and * y = x(order) are the same. */ public static final synchronized int[] uniqueSort(double[] x) { TreeMap tm = new TreeMap(); for (int i = 0; i < x.length; i++) { Double key = new Double(x[i]); boolean exists = tm.containsKey(key); if (exists) { // Do nothing. Ignore duplicate keys } else { tm.put(key, new Integer(i)); } } Object[] values = tm.values().toArray(); int[] order = new int[values.length]; for (int i = 0; i < values.length; i++) { Integer tmp = (Integer) values[i]; order[i] = tmp.intValue(); } return order; } }