Java Array sort malejąco?

Czy Jest jakiś łatwy sposób sortowania tablicy w porządku malejącym, jak w jaki sposób mają sortowanie w porządku rosnącym w klasie Arrays ?

Czy mam przestać być leniwy i zrobić to Sam: [

Author: I Like to Code, 2009-11-08

14 answers

Możesz użyć tego do sortowania wszelkiego rodzaju obiektów

sort(T[] a, Comparator<? super T> c) 

Arrays.sort(a, Collections.reverseOrder());

Arrays.sort() nie można użyć bezpośrednio do sortowania prymitywnych tablic w porządku malejącym. Jeśli spróbujesz wywołać metodę Arrays.sort() przez podanie odwrotnego komparatora zdefiniowanego przez Collection.reverseOrder(), spowoduje to wyrzucenie błędu

Nie znaleziono odpowiedniej metody dla sort (int[],comparator)

To będzie dobrze działać z tablicą Integer, ale nie będzie działać z tablicą int.

Jedynym sposobem sortowania prymitywnej tablicy w porządku malejącym jest, najpierw posortuj tablicę w porządku rosnącym, a następnie odwróć tablicę w miejscu. Dotyczy to również dwuwymiarowych macierzy pierwotnych.

 268
Author: jhamon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-17 14:51:03

Możesz użyć tego:

    Arrays.sort(data, Collections.reverseOrder());

Collections.reverseOrder() zwraca Comparator używając odwrotnego porządku naturalnego. Możesz uzyskać odwróconą wersję własnego komparatora za pomocą Collections.reverseOrder(myComparator).

 87
Author: William,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-19 22:55:33

Dla listy

Collections.sort(list ,Collections.reverseOrder());

Dla tablicy

Arrays.sort(array, Collections.reverseOrder());
 79
Author: Ornithopter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-25 04:31:58

Bez wyraźnego komparatora:

Collections.sort(list, Collections.reverseOrder());

Z jawnym porównaniem:

Collections.sort(list, Collections.reverseOrder(new Comparator()));
 46
Author: Milan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-18 02:13:03

Alternatywą może być (dla liczb!!!)

  1. pomnóż tablicę przez -1
  2. Sortuj
  3. pomnóż jeszcze raz przez -1

Dosłownie:

array = -Arrays.sort(-array)
 41
Author: FHDougherty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-05 17:19:53

Java 8:

Arrays.sort(list, comparator.reversed());

Update: reversed() odwraca określony komparator. Zazwyczaj komparatory kolejność rosnąco, więc to zmienia kolejność malejąco.

 6
Author: Michel Jung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-28 10:59:38

Dla tablicy, która zawiera elementy pierwiastków, jeśli istnieje org.apache.commons.lang(3) w dyspozycji łatwy sposób odwrócenia tablicy (po jej sortowaniu) jest użycie:

ArrayUtils.reverse(array);
 4
Author: Josip Maslac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-27 10:27:43

Nie wiem jaki był twój przypadek użycia, jednak oprócz innych odpowiedzi tutaj inną (leniwą) opcją jest nadal sortowanie w porządku rosnącym, jak wskazujesz, ale następnie iteracja w odwrotnej kolejności.

 3
Author: SK9,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-27 10:51:42

Najpierw musisz posortować tablicę używając:

        Collections.sort(Myarray);

Następnie należy odwrócić kolejność od rosnącej do malejącej za pomocą:

        Collections.reverse(Myarray);
 2
Author: Masoud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-26 19:35:49

Innym rozwiązaniem jest to, że jeśli korzystasz z interfejsuporównywalnego , możesz zmienić wartości wyjściowe, które podałeś w swoim compareTo(Object bCompared).

Na Przykład:

public int compareTo(freq arg0) 
{
    int ret=0;
    if(this.magnitude>arg0.magnitude)
        ret= 1;
    else if (this.magnitude==arg0.magnitude)
        ret= 0;
    else if (this.magnitude<arg0.magnitude)
        ret= -1;
    return ret;
}

Gdziemagnitude jest atrybutem z datatypedouble w moim programie. To było sortowanie mojej zdefiniowanej klasy freq w odwrotnym porządku według jej wielkości. Aby to poprawić, Przełącz wartości zwracane przez < i >. Daje to następujące :

public int compareTo(freq arg0) 
{
    int ret=0;
    if(this.magnitude>arg0.magnitude)
        ret= -1;
    else if (this.magnitude==arg0.magnitude)
        ret= 0;
    else if (this.magnitude<arg0.magnitude)
        ret= 1;
    return ret;
}

Aby skorzystać z tego porównania, po prostu wywołujemy Arrays.sort(mFreq), co da ci posortowaną tablicę freq [] mFreq.

Piękno (moim zdaniem) tego rozwiązania polega na tym, że może ono być używane do sortowania klas zdefiniowanych przez użytkownika, a nawet więcej niż sortowanie ich według określonego atrybutu. Jeśli implementacja porównywalnego interfejsu brzmi dla Ciebie zniechęcająco, zachęcam do tego, żebyś tak nie myślał, w rzeczywistości tak nie jest. ten link jak zaimplementować porównywalne ułatwiły mi życie. Mając nadzieję, że ludzie skorzystają z tego rozwiązania i że wasza radość będzie nawet porównywalna do mojej.

 2
Author: Chris - Jr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:48
array.sort(function(a, b) {return b - a;}); //descending 

Lub

array.sort(function(a, b) {return a - b;}); //ascending
 1
Author: AzFalconer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-19 05:10:42
public double[] sortArrayAlgorithm(double[] array) { //sort in descending order
    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array.length; j++) {
            if (array[i] >= array[j]) {
                double x = array[i];
                array[i] = array[j];
                array[j] = x;
            }
        }
    }
    return array;
}

Po prostu użyj tej metody do sortowania tablicy typu double w porządku malejącym, możesz użyć jej do sortowania tablic dowolnego innego typu (jak int, float, itd.) Po prostu zmieniając typ "return type", Typ" argument type "i zmienną" X " type na odpowiedni typ. możesz również zmienić ">=" na "

 1
Author: Mohsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-29 10:09:35

Wiem, że to dość stary wątek, ale tutaj jest zaktualizowana wersja dla liczb całkowitych i Javy 8:

Arrays.sort(array, (o1, o2) -> o2 - o1);

Zauważ ,że jest to "o1-o2" dla normalnego porządku rosnącego (lub komparatora.comparingInt ()).

To działa również dla innych rodzajów obiektów. Powiedz:

Arrays.sort(array, (o1, o2) -> o2.getValue() - o1.getValue());
 0
Author: sebschaef,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-03 18:13:17

To mi pomogło:

package doublearraysort;

import java.util.Arrays;
import java.util.Collections;

public class Gpa {


    public static void main(String[] args) {
        // initializing unsorted double array
        Double[] dArr = new Double[] {                 
            new Double(3.2),
            new Double(1.2),
            new Double(4.7),
            new Double(3.3),
            new Double(4.6),
           };
        // print all the elements available in list
        for (double number : dArr) {
            System.out.println("GPA = " + number);
        }

        // sorting the array
        Arrays.sort(dArr, Collections.reverseOrder());

        // print all the elements available in list again
        System.out.println("The sorted GPA Scores are:");
        for (double number : dArr) {
            System.out.println("GPA = " + number);
        }
    }
}

Wyjście:

GPA = 3.2
GPA = 1.2
GPA = 4.7
GPA = 3.3
GPA = 4.6
The sorted GPA Scores are:
GPA = 4.7
GPA = 4.6
GPA = 3.3
GPA = 3.2
GPA = 1.2
 0
Author: Fred Denson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-24 20:29:32