Java examples for java.lang:Math Array Function
This sorts an array descending and returns its order.
/*//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; } }