Sortowanie 2 tablic - Comparator

0

Witam, gdzieś w necie znalazłem taki oto skrypt:

 
import java.util.*;

public class Sort 
{
    public static void main(String[] args) 
    {
        final int[] numbers = {10,40,3,14,25,16};
        final String[] colors  = {"white","blue","red","black","orange","purple"};
        
        Integer[] sortOrder = new Integer[numbers.length];

        for(int i=0; i<sortOrder.length; i++)
        {
            sortOrder[i] = i;
        }
     
        Arrays.sort(sortOrder,new Comparator<Integer>()
        {   
            public int compare(Integer a, Integer b)
            {
                return numbers[b]-numbers[a];
            }
        });
        for(int i=0;i<sortOrder.length;i++)
       {
            System.out.println(numbers[sortOrder[i]]+"-"+colors[sortOrder[i]]);
        }
    }
}

Następuje sortowanie liczb od największej do najmniejszej, każda liczba ma nadal przyporządkowany swój kolor:

40-blue
25-orange
16-purple
14-black
10-white
3-red

Pewnie dla Was to pikuś, ale jakoś nie potrafię tego samego zrobić z tablicą typy double. Np mamy takie tablice:

 
final double[] numbers = {10.5,40.8,3.14,14.8,25.9,16.1};
final String[] colors  = {"white","blue","red","black","orange","purple"};

Poza tym byłbym wdzięczny jakby ktoś wytłumaczył mi tak na "chłopski rozum" dziłanie Comparatora (najlepiej na podstawie powyższego kodu), jakoś nie mogę tego pojąć.

0

Jeśli Java wykonywałaby np sortowanie bąbelkowe: http://pl.wikisource.org/wiki/Sortowanie_b%C4%85belkowe/kod to Comparator jest wykonywany zamiast porównania a[i] < a[i -i]. Dokładnie to zamiast if (a[i] < a[i - 1]) jest wykonywane if (a[i].compareTo(a[i - 1]) < 0).

0

Kod możesz przerobić tak:

            public int compare(Integer a, Integer b)
            {
                if(numbers[b]>numbers[a])
                   return 1;
                else if(numbers[b]<numbers[a])
                   return -1;
                return 0;
            }

0

OK, thx o to mi chodziło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1