Mega Code Archive

 
Categories / Java / Collections Data Structure
 

Returns an array of indices indicating the order the data should be sorted in

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 &quot;as is&quot;, 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;     } }