Array Elemente sortieren in aufsteigender Reihenfolge

datguy52

Mitglied
Hallo,

ich habe letztens nochmal rein geschaut, wie man ein Array sortiert von Groß nach Klein. Jetzt sehe ich, dass die if-Bedingung keinen Sinn für mich macht.

Warum ist es bei folgendem arr<arr[j], wenn man doch das größte Element auf der rechten Seite haben möchte?

Java:
for (int i = 0; i < arr.length; i++) {

            for (int j = 0; j < arr.length; j++) {

                if (arr[i] < arr[j]) {

                    int temp = arr[i];

                    arr[i]= arr[j];

                    arr[j] = temp;

             }

}
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Code bitte immer in Code Tags posten - also mit dem Knopf </> links oberhalb des Eingabefeldes.
So ist Code nicht richtig zu lesen, da ein [i] sonst vom Forum als Kursive Schrift ausgewertet wird.

Kleine Codeteile kann man - so wie ich oben - mit ICODE Tags schreiben - das verbirgt sich hinter den ... und dann der Knopf >_

Und der Sortier-Algorithmus ist schlicht falsch. i und j kreuzen sich regelmäßig und dadurch wird das ein größeres Element mal nach Rechts und man nach Links getauscht. Das würde ich daher erst einmal als falsch bezeichnen - wobei ich jetzt nicht sicher bin, ob da immer ein gültiges Ergebnis bei raus kommen würde (sprich: Er wird nur unnötig viel getauscht) oder ob da auch falsche Ergebnisse möglich sind.
 

Jw456

Top Contributor
so wird dein code auch nicht laufen wenn das so

Java:
int arr[]= {3,5,1,6,2};

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i] < arr[j]) {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }

        }
 

datguy52

Mitglied
Code bitte immer in Code Tags posten - also mit dem Knopf </> links oberhalb des Eingabefeldes.
So ist Code nicht richtig zu lesen, da ein [i] sonst vom Forum als Kursive Schrift ausgewertet wird.

Kleine Codeteile kann man - so wie ich oben - mit ICODE Tags schreiben - das verbirgt sich hinter den ... und dann der Knopf >_

Und der Sortier-Algorithmus ist schlicht falsch. i und j kreuzen sich regelmäßig und dadurch wird das ein größeres Element mal nach Rechts und man nach Links getauscht. Das würde ich daher erst einmal als falsch bezeichnen - wobei ich jetzt nicht sicher bin, ob da immer ein gültiges Ergebnis bei raus kommen würde (sprich: Er wird nur unnötig viel getauscht) oder ob da auch falsche Ergebnisse möglich sind.
Das Ergebnis ist immer richtig. Deshalb bin ich auch etwas verwundert. Habe bereits mehrere Arrays ausprobiert und bin immer zum richtigen Ergebnis gekommen.
Dreht man den Operator um also arr>arr[j], wird der Array von Groß nach Klein sortiert.
 

datguy52

Mitglied
so wird dein code auch nicht laufen wenn das so

Java:
int arr[]= {3,5,1,6,2};

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i] < arr[j]) {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }

        }
Es geht hier wirklich nur um die Bedingung. Das das alles hier nicht richtig eingefügt oder formatiert ist, ist erstmal unwichtig für mich.
 
K

kneitzel

Gast
Ok, die Sortierung ist stimmig, denn unter dem Strich hast du zwar erst ein paar Vertauschungen in die falsche Richtung, aber dann wird eine Art Bubble Sort ausgeführt (Halt anders herum - das kleinste Element wandert nach unten).

Wenn Du Dir das Anschaust und nur die Fälle betrachtest, bei denen i > j ist:
arr[i] < arr[j] bedeutet dann: Hinten ist ein Element gefunden worden, das kleiner ist als das Element weiter vorne.

Den BubbleSort hättest Du, wenn du i also z.B. ab 1 laufen lassen würdest und j nur von 0 bis i-1

Jetzt ist nur die Frage: Wenn i < j ist: Wird dann nicht etwas kaputt gemacht?
Prinzipiel ja. Aber beim nächsten Durchlauf wird das immer wieder behoben. Und beim letzten Durchlauf hat man es dann wieder korrekt, denn da ist nie i < j.

Edit: Das "prinzipiell ja" ist evtl. nicht ganz korrekt. Der Bereich bis zum i ist sortiert. Dieses "kaputt machen" bedeutet nur, dass das letzte bereits sortierte Element unnötig getauscht wird. Wenn also hinter der Position i ein Element gefunden wird, das größer ist, als das Element bei i, dann wird dieses Element getauscht.

Also wenn wir die Sortierung betrachten, dann haben wir nach den Durchgängen immer:
erst: kleinstes Element, größtes Element, Rest....
dann: kleinstes Element, zweit kleinstes Element, größtes Element, Rest ....
Das größte Element wird also immer an die Stelle nach dem sortierten geschoben und damit wird auch deutlich, dass dieser Algorithmus zu viel macht.
 
Zuletzt bearbeitet von einem Moderator:

datguy52

Mitglied
Ok, die Sortierung ist stimmig, denn unter dem Strich hast du zwar erst ein paar Vertauschungen in die falsche Richtung, aber dann wird eine Art Bubble Sort ausgeführt (Halt anders herum - das kleinste Element wandert nach unten).

Wenn Du Dir das Anschaust und nur die Fälle betrachtest, bei denen i > j ist:
arr[i] < arr[j] bedeutet dann: Hinten ist ein Element gefunden worden, das kleiner ist als das Element weiter vorne.

Den BubbleSort hättest Du, wenn du i also z.B. ab 1 laufen lassen würdest und j nur von 0 bis i-1

Jetzt ist nur die Frage: Wenn i < j ist: Wird dann nicht etwas kaputt gemacht?
Prinzipiel ja. Aber beim nächsten Durchlauf wird das immer wieder behoben. Und beim letzten Durchlauf hat man es dann wieder korrekt, denn da ist nie i < j.

Edit: Das "prinzipiell ja" ist evtl. nicht ganz korrekt. Der Bereich bis zum i ist sortiert. Dieses "kaputt machen" bedeutet nur, dass das letzte bereits sortierte Element unnötig getauscht wird. Wenn also hinter der Position i ein Element gefunden wird, das größer ist, als das Element bei i, dann wird dieses Element getauscht.

Also wenn wir die Sortierung betrachten, dann haben wir nach den Durchgängen immer:
erst: kleinstes Element, größtes Element, Rest....
dann: kleinstes Element, zweit kleinstes Element, größtes Element, Rest ....
Das größte Element wird also immer an die Stelle nach dem sortierten geschoben und damit wird auch deutlich, dass dieser Algorithmus zu viel macht.
Bin auch gerade auf die Lösung gekommen! Ich hätte das ganz einfache mal im Kopf mit zwei Elementen durchgehen sollen.
Ja, das ganze ist ein durcheinander. Hatte das sortieren eines Arrays auch noch ganz anders in Erinnerung😀
Vielen Dank für die Hilfe!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Elemente in einem Array Java Basics - Anfänger-Themen 5
H Array Elemente Java Basics - Anfänger-Themen 17
T Elemente aus Array zu TableView JavaFX übertragen Java Basics - Anfänger-Themen 2
J Array Elemente werden nicht gefunden! Java Basics - Anfänger-Themen 6
J Array; Elemente kopieren Java Basics - Anfänger-Themen 17
V Array aus Klasse um vererbte Elemente erweitern Java Basics - Anfänger-Themen 3
A Array Elemente extrahieren ! Java Basics - Anfänger-Themen 4
J Elemente in einem 2D-Array summieren Java Basics - Anfänger-Themen 6
Kirby.exe Anzahl vorkommender Elemente im Array zählen Java Basics - Anfänger-Themen 9
L Anzahl der Elemente key in einem Array mit log(N) Laufzeit Java Basics - Anfänger-Themen 4
L Array Elemente verschieben Java Basics - Anfänger-Themen 5
J Elemente in Array speichern, löschen, ... Java Basics - Anfänger-Themen 3
arjoopy Kapselung Elemente aus Objekt-Array ausgeben Java Basics - Anfänger-Themen 8
K Anzahl gleicher Elemente in Array Java Basics - Anfänger-Themen 32
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
C Array Elemente Paarweise vertauschen Java Basics - Anfänger-Themen 2
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
R Variablen [GELÖST]Elemente in Array um Schrittweite s verschieben Java Basics - Anfänger-Themen 2
A Eindeutige Elemente aus Array extrahieren Java Basics - Anfänger-Themen 9
B Zweidimensionales Array Elemente jeder Spalte zählen Java Basics - Anfänger-Themen 9
L Rückwärtsausgabe der Array-Elemente Java Basics - Anfänger-Themen 5
1 Minimum aller Elemente in einem Array bestimmen Java Basics - Anfänger-Themen 10
T Elemente im Array umdrehen Java Basics - Anfänger-Themen 9
L Elemente zufällig in ein Array verteilen Java Basics - Anfänger-Themen 12
T Wieviel Array-Elemente Java Basics - Anfänger-Themen 19
W Elemente in einem Array nach 'oben' verschieben Java Basics - Anfänger-Themen 9
A Elemente in array umkehren Java Basics - Anfänger-Themen 32
H Alle Array-Elemente auf einmal überprüfen? Java Basics - Anfänger-Themen 10
R return Anweisungen und Array Elemente löschen Java Basics - Anfänger-Themen 6
B Ausgeben einzelner String Array Elemente funktioniert nicht Java Basics - Anfänger-Themen 4
K Elemente eines Array verschieben Java Basics - Anfänger-Themen 18
C Array - Elemente umordnen ? Java Basics - Anfänger-Themen 20
B zwei zufällige elemente aus array lesen und überprüfen Java Basics - Anfänger-Themen 8
T Elemente aus zweidimensionalen Array löschen Java Basics - Anfänger-Themen 6
D Array Elemente auslesen Java Basics - Anfänger-Themen 14
D Elemente im Array verschieben Java Basics - Anfänger-Themen 15
M XML-Elemente in Array speichern Java Basics - Anfänger-Themen 26
T Überprüfen, ob Array Elemente hat Java Basics - Anfänger-Themen 22
G Rekursiv Array Elemente quadrieren Java Basics - Anfänger-Themen 2
D String array im konstruktor --> wie gibt man elemente an? Java Basics - Anfänger-Themen 2
0 Element aus Array löschen andere Elemente verschieben? Java Basics - Anfänger-Themen 7
V Elemente an Array anhängen Java Basics - Anfänger-Themen 5
S Elemente aus Array entfernen Java Basics - Anfänger-Themen 8
M Array Elemente löschen Java Basics - Anfänger-Themen 6
G Elemente in einem String-Array in einen String umwandeln Java Basics - Anfänger-Themen 2
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben