Sequenzen sortieren

techdevil

Aktives Mitglied
Hi,

gegeben sind 2 Arrays A=18,4,2,7 und B=4,1,3,2
A ist das zu sortierende Array. B ist das "Muster" nachdem sortiert werden soll.
Gesucht ist ein Sortieralgorithmus, sodass am Ende A=4,7,2,18 ist.
Er soll zudem im Schnitt O(nlogn) benötigen.
Jemand nen Tip?
 

javimka

Top Contributor
Also wenn du A sortiert hast, kannst du einfach die Einträge gemäss B vertauschen (=permutieren).
Java:
int m = B.length;
int[] array = new int[m];
for (int i=0,i<m;i++) {
  array[i] = A[ B[i] ];
}

EDIT: Vielleicht habe ich das Muster von B noch nicht verstanden.
Heisst B[0], dass das B[0]-te Element an die 0-te Stelle soll oder
heisst B[0], dass das 0-te Element an die B[0]-te Stelle soll?
 
Zuletzt bearbeitet:

techdevil

Aktives Mitglied
Ich hatte leider vergessen zu erwähnen, dass die Aufgabenstellung erfordert, dass man keine weiteren Arrays einführt, sondern nur die Arrays A und B benutzt.:oops:

EDIT:

Wenn B[0]=4 ist, dann bedeutet dass, das A'[4]=A[0]
Also der Wert von B beim Index 0 ist der Index des Wertes A[0] im neuen Array A'
 
Zuletzt bearbeitet:

Mizar

Aktives Mitglied
Hmmm... also ohne ein weiteres Array anzulegen und ohne das Muster-Array zu ändern fällt mir nur der folgende Weg mit Rekursion ein:
Java:
import java.util.Arrays;

public class MusterSortTest
{
	public static void arrayMusterSort(int[] array, int[] muster)
	{
		if(array.length == muster.length && array.length > 0) { 
			array[0] = rec(array, muster, 0);
		}
	}
	
	public static int rec(int[] array, int[] muster, int n)
	{
		int ret = array[muster[n] - 1];
		if(++n < array.length) {
			array[n] = rec(array, muster, n);
		}
		return ret;
	}
	
	public static void main(String[] args)
	{
		int[] A = new int[]{18, 4, 2, 7};
		int[] B = new int[]{4, 1, 3, 2};
		System.out.println("Vor Sortierung: " + Arrays.toString(A));
		arrayMusterSort(A, B);
		System.out.println("Nach Sortierung: " + Arrays.toString(A));
	}
}
Vielleicht fällt ja jemandem noch etwas anderes ein.
 

Mizar

Aktives Mitglied
So zum Beispiel:
Java:
public static void arrayMusterSort2(int[] array, int[] muster)
{
	if(array.length != muster.length) {
		return;
	}
	for(int i = 0; i < muster.length; ++i) {
		muster[i] = array[muster[i] - 1];
	}
	for(int i = 0; i < muster.length; ++i) {
		array[i] = muster[i];
	}
}
Also werden hier die entsprechenden Werte einfach ins Muster-Array geschoben und anschließend in das eigentlich zu sortierende Array. Dabei wird eben wie gesagt das Muster-Array mit verändert, weshalb ich den rekursiven Weg bevorzugen würde, da dort das Muster-Array unangetastet bleibt. Wie man die Aufgabe aber ohne ein neues Array anzulegen und ohne das Muster-Array zu ändern ohne Rekursion schaffen soll, wäre mir persönlich ein Rätsel.
 

javimka

Top Contributor
Das wird jetzt aber falsch permutiert, weil techdevil ja gesagt hat, dass wenn B[0]==4 ist, A'[4]=A[0] gelten soll. D.h., die Einträge m_i in Muster beschreiben, wo das Element i hin soll. Du machst das aber umgekehrt, nämlich so, dass die m_i beschreiben, welches Element an die Stelle i hin soll.
 

techdevil

Aktives Mitglied
ja das haste rechte javimka.
Was sagt ihr dazu:
Java:
import java.util.Arrays;

public class Aufgabe_4_Korrekt {
	   
	public static void main(String[] args) {
        int[] X = {88,66,77,11,55};
        int[] A = {1,3,2,5,4};
        X = Quicksort(A, X, 0, X.length-1);
        System.out.println(Arrays.toString(X));
    }
	
	public static int[] Quicksort(int[] a, int[] x, int l, int r){
        if (l<r) {
            int teiler = partition(a, x, l,r);
            Quicksort(a, x, l, teiler-1);
            Quicksort(a, x, teiler+1, r);
        }
        return x;
    }
   
    public static int partition(int[] a, int[] x, int l, int r){
        int i = l, j = r-1, pivot = a[r];
        do{
            while ((a[i] <= pivot) && (i<r)) i++;
            while ((a[j] >= pivot) && (j>l)) j--;
            if (i<j) {
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
                temp = x[i];
                x[i] = x[j];
                x[j] = temp;
                i++; j--;
            }
        } while (i<j);
        if (a[i]>pivot) {
            int temp = a[i];
            a[i] = a[r];
            a[r] = temp;
            temp = x[i];
            x[i] = x[r];
            x[r] = temp;
        }
        return i;
    }
}
 

javimka

Top Contributor
Da kommt bei mir [88, 77, 66, 55, 11] raus, was ja nicht stimmt. Das Array ist einfach abwärts sortiert, aber nicht gemäss Muster. Dann wäre die Lösung ja [11, 66, 55, 88, 77].
Methodennamen sollten klein geschrieben werden, also quicksort(), statt Quicksort.
 

techdevil

Aktives Mitglied
X = {88,66,77,11,55};
A = {1,3,2,5,4};

Also es sollte {88,77,66,55,11} rauskommen, da der Wert von A den Index von X im "neuen" Array angibt.
Das die Folge jetzt abwärts sortiert ist, ist Zufall.
 

javimka

Top Contributor
Achso, ich dachte, du musst das Array zuerst normal sortieren und erst dann die Positionen vertauschen. In dem Fall aber stimmt es wohl :D
 

Mizar

Aktives Mitglied
Hmm,... sicher das deine Quicksort()-Methode funktioniert? Weil ich habe diese mal mit den beiden Arrays aufgerufen, die du am Anfang des Threads angegeben hattest:
A= {18, 4, 2, 7} und B= {4, 1, 3, 2}
Und zwar:
Java:
public static void main(String[] args)
{
	int[] A = new int[]{18, 4, 2, 7};
	int[] B = new int[]{4, 1, 3, 2};
	System.out.println("Vor Sortierung: " + Arrays.toString(A));
	A = Quicksort(B, A, 0, A.length - 1);
	System.out.println("Nach Sortierung: " + Arrays.toString(A));
}
Als Ausgabe erhalte ich aber:
Code:
Vor Sortierung: [18, 4, 2, 7]
Nach Sortierung: [4, 7, 2, 18]
Aber ich dachte das Endergebnis müsste wie folgt lauten:
Code:
Nach Sortierung: [7, 18, 2, 4]
Vielleicht habe ich ja jetzt nen Denkfehler, oder es stimmt was mit der Methode nicht. :bahnhof:
 

Sonecc

Gesperrter Benutzer
ich will ja nix sagen, aber in der aufgabe wird gefordert, dass die funktion eine durchschnittliche Komplexität O(n logn) haben soll.
Quicksort hat allerdings nur im Best Case eine Komplexität von O(n logn)
Ich würde daher behaupten, dass Quicksort die falsche Wahl ist...

Edit: Uni Zeit ist zu lang her .. Könnte wohl richtig sein
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
johnboyne Escape-Sequenzen Java Basics - Anfänger-Themen 1
S Passwortchecker Sequenzen überprüfen Java Basics - Anfänger-Themen 4
? Wie sind ESCAPE-Sequenzen (z.B \f für einen Seitenvorschub) richtig anuwenden? Java Basics - Anfänger-Themen 3
J tabellarische Ausgabe mit Escape-Sequenzen ! Java Basics - Anfänger-Themen 3
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J HashSet mit Comparable sortieren Java Basics - Anfänger-Themen 13
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
O Sortieren mit Insertion Sort Java Basics - Anfänger-Themen 3
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5
rosima26 Java nach letzter Ziffer sortieren Java Basics - Anfänger-Themen 19
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
G zweidimensionales int Array sortieren Java Basics - Anfänger-Themen 57
K Java sortieren. Java Basics - Anfänger-Themen 7
D Array Elemente sortieren in aufsteigender Reihenfolge Java Basics - Anfänger-Themen 10
J Tabelle Sortieren Java Basics - Anfänger-Themen 48
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
L Sortieren Java Basics - Anfänger-Themen 1
C Wie 2 Arrays zusammenfügen und sortieren? Java Basics - Anfänger-Themen 11
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
O 2D-Array nach einer Spalte sortieren Java Basics - Anfänger-Themen 22
C Sortieren einer ArrayList Java Basics - Anfänger-Themen 2
A Teilarrays eines 2D-Arrays sortieren Java Basics - Anfänger-Themen 4
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
java3690 eine liste sortieren Java Basics - Anfänger-Themen 12
DorFey Sortieren eines mehrdimensionalen Arrays Java Basics - Anfänger-Themen 8
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
W Personen sortieren mit Comparator Java Basics - Anfänger-Themen 9
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
B HashMap alphabetisch sortieren Java Basics - Anfänger-Themen 2
S Streams - Abfrage absteigend sortieren Java Basics - Anfänger-Themen 11
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
V Collections int Werte in einer Liste sortieren Java Basics - Anfänger-Themen 23
L Array sortieren Java Basics - Anfänger-Themen 4
L Java Int-Array, Zahlen sortieren Java Basics - Anfänger-Themen 8
T Java: Array monat absteigend sortieren? Java Basics - Anfänger-Themen 1
B Liste sortieren? Java Basics - Anfänger-Themen 4
P Array Sortieren mit boolean? Java Basics - Anfänger-Themen 33
scratchy1 Array sortieren und dann String-Repräsentation ausgeben Java Basics - Anfänger-Themen 2
O Arrays sortieren in einer Methode Java Basics - Anfänger-Themen 2
E Methoden 2 Arrays sortieren (MergeSort) Java Basics - Anfänger-Themen 3
B Suchen und sortieren Java Basics - Anfänger-Themen 10
F Zahlen im Feld sortieren + Unterprogramm Java Basics - Anfänger-Themen 4
O Zweidimensional Array sortieren Java Basics - Anfänger-Themen 14
J Liste,Queue,Stack sortieren Java Basics - Anfänger-Themen 2
CptK Variablen Teile eines Arrays zufällig sortieren Java Basics - Anfänger-Themen 7
K Methoden Array[][] sortieren Java Basics - Anfänger-Themen 30
CptK Datentypen Integer ArrayList sortieren Java Basics - Anfänger-Themen 2
E ArrayList sortieren Java Basics - Anfänger-Themen 16
L Methode zum sortieren Java Basics - Anfänger-Themen 1
L Methode zum sortieren Java Basics - Anfänger-Themen 1
B Sortieren mit Iterator Java Basics - Anfänger-Themen 4
B Wie kann ich die Buchstaben sortieren nach der Höhe der Zahlen Java Basics - Anfänger-Themen 14
A Sortieren ausgerechneter Werte aus einer TXT Datei Java Basics - Anfänger-Themen 8
E LMC (Assembler) Sortieren von 3 Zahlen Java Basics - Anfänger-Themen 4
J String, Int und double Array sortieren Java Basics - Anfänger-Themen 16
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
A Array sortieren Java Basics - Anfänger-Themen 1
N StringArray alphabetisch sortieren Java Basics - Anfänger-Themen 4
Tommy135 Erste Schritte JavaDoc Sortieren Java Basics - Anfänger-Themen 5
R Winkel berechnen bzw. Geraden sortieren Java Basics - Anfänger-Themen 33
L (Integer) Liste nach aufsteigender Summe der Ziffern sortieren (mit Bedingung) Java Basics - Anfänger-Themen 8
F HashMap sortieren <String, Long> Java Basics - Anfänger-Themen 3
D Arraylisten sortieren bitte um Hilfe Java Basics - Anfänger-Themen 4
informatikschüler21 String im Array sortieren Java Basics - Anfänger-Themen 4
U Methoden Zweidimensionales Array mit Arrays.sort sortieren? Java Basics - Anfänger-Themen 22
M Arrays sortieren und kleinster Abstand Java Basics - Anfänger-Themen 3
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
N TreeMap alphabetisch sortieren? Java Basics - Anfänger-Themen 3
I <List> sortieren Java Basics - Anfänger-Themen 2
F Interface Nach mehreren Kriterien sortieren Java Basics - Anfänger-Themen 2
R Objekte Vergleichen und Sortieren Java Basics - Anfänger-Themen 3
I Sortieren nach Priorität Java Basics - Anfänger-Themen 3
S List<T<X,Y> sortieren Java Basics - Anfänger-Themen 5
W Array sortieren Java Basics - Anfänger-Themen 3
C JList Einträge nach Datum sortieren Java Basics - Anfänger-Themen 3
Alex/89 Werte einer .txt Datei sortieren Java Basics - Anfänger-Themen 8
N Bubble Sort sortieren mit Int Werte Java Basics - Anfänger-Themen 8
N Collection sortieren/ filtern Java Basics - Anfänger-Themen 7
C Methoden Einfach verkette Liste - int Werte aufsteigend sortieren Java Basics - Anfänger-Themen 1
P Listen sortieren mit Binärbaum gibt keine Ausgabe ab 10000 Integern Java Basics - Anfänger-Themen 14
S array sortieren Java Basics - Anfänger-Themen 7
D Array mit Zufallszahlen, dann sortieren: Hilfe gesucht! Java Basics - Anfänger-Themen 1
D Methoden int-Array absteigend sortieren Java Basics - Anfänger-Themen 8
C Chars in einem String alphabetisch sortieren Java Basics - Anfänger-Themen 1
C OOP array Sortieren ohne den sort Befehl Java Basics - Anfänger-Themen 10
S int-Array mittels Arrays.sort() in einer Schleife sortieren. Java Basics - Anfänger-Themen 2
J Sortieren Java Basics - Anfänger-Themen 21
O Erste Schritte TreeMap nach Value sortieren Java Basics - Anfänger-Themen 2
K Collections Sortieren nach zweiter Spalte in JTable Java Basics - Anfänger-Themen 18
H Strings vergleichen & sortieren Java Basics - Anfänger-Themen 20
J Ungewolltes Sortieren eines Arrays Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben