2016-08-24 4 views
-1

sortiert Ich habe zwei Arrays:, wenn das andere Array in aufsteigender Reihenfolge in Java

  • int[] arr1
  • int[] arr2

Sowohl die oben haben eine Größe von n Das ist eine Benutzereingabe.

Ich muss arr2 in aufsteigender Reihenfolge mit Java arrangieren. Wie ändere ich den Wert von arr1 entsprechend dem Wert von arr2?

Beispiel (weitere Informationen):

int[] arr1={1,2,3,4,5}; 
int[] arr2={3,6,5,1,9}; 
Arrays.sort(arr2); 

Wie ich das ausgegeben werden soll:

  • arr1 = {4,1,3,2,5}
  • arr2 = {1, 3,5,6,9}

Hier ARR2 bereits sortiert

+0

Was meinen Sie mit 'Wie ändere ich den Wert von arr1 entsprechend dem Wert von arr2'? Sie möchten, dass 'arr1' sortiert wird? Oder arrangiert in einer bestimmten Reihenfolge im Vergleich zu 'arr2'. Ich denke, einige Informationen fehlen. Könnten Sie bitte näher ausführen? Bitte geben Sie auch an, was Sie bisher versucht haben. – iMan

+0

@iMan Es könnte besser erklärt werden, aber ich denke, was hier gewünscht wird, ist, beide Arrays gleich umzuordnen, so endet 'arr2' sortiert. In dem Beispiel haben beide das vierte Element zuerst, das erste Element zweite usw. Es ist wirklich ein bisschen schwierig zu erklären. –

+0

KVilla, zeigen Sie uns, was Sie bisher versucht haben.Sie könnten versuchen, arr2 von Hand zu sortieren (anstatt diese Sortiermethode zu verwenden) und dann, wenn Sie etwas in arr2 ändern, müssen Sie nur die gleiche Änderung in arr1 vornehmen. – Mark

Antwort

0

Wenn im zweiten Array keine doppelten Nummern wie im Beispiel vorhanden sind, können Sie Map verwenden.

Zuerst nehmen Sie eine Karte. Setzen Sie array2 Werte in key und array1 Werte in value in der Karte. Sortieren Sie dann die Karte nach den Werten. Wenn Sie jetzt die Schlüssel von der Karte bekommen, bekommen Sie, was Sie wollen.

Verwenden Sie TreeMap. Es muss nicht sortiert werden. Es gibt Daten so ein, dass garantiert ist, dass die Karte in aufsteigender Reihenfolge ist.

Map<Integer, Integer> m = new TreeMap<>(); 

int[] arr1 = {1, 2, 3, 4, 5}; 
int[] arr2 = {3, 6, 5, 1, 9}; 

// Put array2 values as key parameter and array1 values as value parameter 
for (int i = 0; i < arr1.length; i++) { 
    m.put(arr2[i], arr1[i]); 
} 

int i = 0; 

// Print the sorted map 
for (Map.Entry<Integer, Integer> entry : m.entrySet()) { 
    System.out.println("arr1["+ i +"] = " + entry.getValue()); 
    i++; 
} 

Ausgang:

arr1[0] = 4 
arr1[1] = 1 
arr1[2] = 3 
arr1[3] = 2 
arr1[4] = 5 
+0

Was passiert, wenn es Duplikate gibt? –

+0

Beispiel bitte? – Shahid

+0

int [] arr2 = {1, 2,2,2,2,2,2,2,2, 3, 4, 5}; int [] arr1 = {3, 6,1,2,3,4,5,6,7, 5, 1, 9}; –

0

Was ich tun würde, ist die folgende:

Erstellen Sie eine Klasse, die zwei Zahlen enthält (eine von arr1 und eine andere von arr2). Machen Sie es vergleichbar und vergleichen Sie die zweite Nummer.

public class Pair implements Comparable<Pair> { 

    private Integer e1; 
    private Integer e2; 

    @Override 
    public int compareTo(Pair o) { 
     return getE1().compareTo(o.getE1()); 
    } 
} 

In dem Verfahren wird eine Liste von Pair machen und es mit den Elementen der beiden Arrays füllen, dann einfach sortieren sie mit dem Verfahren in Collections.

int[] arr1={1,2,3,4,5}; 
int[] arr2={3,6,5,1,9}; 
ArrayList<Pair> list = new ArrayList<Pair>(); 
for(int i = 0; i < arr1.length; i++) { 
    list.add(new Pair(arr1[i], arr2[i]); 
} 
Collections.sort(list); 
Verwandte Themen