This sorts an array descending and returns its order. - Java java.lang

Java examples for java.lang:Math Array Function

Description

This sorts an array descending and returns its order.

Demo Code

/*//w ww .  ja v  a2s.c  o  m
 *  Copyright (c) 2010 Ondrej Dusek
 *  All rights reserved.
 * 
 *  Redistribution and use in source and binary forms, with or without modification, 
 *  are permitted provided that the following conditions are met:
 *  Redistributions of source code must retain the above copyright notice, this list 
 *  of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright notice, this 
 *  list of conditions and the following disclaimer in the documentation and/or other 
 *  materials provided with the distribution.
 *  Neither the name of Ondrej Dusek nor the names of their contributors may be
 *  used to endorse or promote products derived from this software without specific 
 *  prior written permission.
 * 
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
 *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
 *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
 *  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
 *  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
 *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
 *  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 *  OF THE POSSIBILITY OF SUCH DAMAGE.
 */
//package com.java2s;

public class Main {
    /**
     * This sorts an array descending and returns its order. Uses the shakesort algorithm. The order of same
     * values is random.
     * @param arr the array to be sorted
     * @return the descending order of the elements in the array
     */
    public static int[] getOrder(double[] arr) {

        boolean changes = true;
        int[] order = new int[arr.length];

        for (int i = 0; i < order.length; ++i) { // initialize the order field
            order[i] = i;
        }

        while (changes) { // shakesort
            changes = false;

            for (int i = 1; i < arr.length; ++i) { // forward pass
                if (arr[i] > arr[i - 1]) {
                    double temp = arr[i];
                    int orderTemp = order[i]; // change the order along with the main array

                    changes = true;
                    arr[i] = arr[i - 1];
                    order[i] = order[i - 1];
                    arr[i - 1] = temp;
                    order[i - 1] = orderTemp;
                }
            }
            for (int i = arr.length - 1; i >= 1; --i) { // backward pass
                if (arr[i] > arr[i - 1]) {
                    double temp = arr[i];
                    int orderTemp = order[i];

                    changes = true;
                    arr[i] = arr[i - 1];
                    order[i] = order[i - 1];
                    arr[i - 1] = temp;
                    order[i - 1] = orderTemp;
                }
            }
        }

        return order;
    }
}

Related Tutorials