SelectionSort ; Code erläutern

newuser1337

Mitglied
Guten Tag allerseits, wir haben in einem kleinen Kurs jeweils einen Code bekommen den wir mit Kommentaren versehen sollen und ihn dann dementsprechend erläutern sollen. Ich habe einen Code des selectionsortalgorithmus bekommen und weiß an einigen Stellen nicht was die Commands bedeuten. Ich wäre sehr dankbar wenn ihr mir die Zeilen, die mit "//?"versehen sind kurz deuten könntet.

Java:
public class SelectionSort {
  public static void main(String[] args) {
    int[] unsortiert = {4,1,6,5,2,7,3,9,8};                                  
    printArray(unsortiert, "Unsortiert: ");                                    
    selectionSort(unsortiert);                                    //?
    printArray(unsortiert, "Sortiert: ");
  }
  public static void selectionSort(int[] unsortiert) {            //?
    for (int i = 0; i < unsortiert.length; i++) {
      int kleinsteZahl = i;
      for (int j = i + 1; j < unsortiert.length; j++) {
        if (unsortiert[j] < unsortiert[kleinsteZahl]) {
          kleinsteZahl = j;
        }
      }
        if (kleinsteZahl != i) {
        int tmp = unsortiert[i];
        unsortiert[i] = unsortiert[kleinsteZahl];
        unsortiert[kleinsteZahl] = tmp;
      }
    }
  }
  public static void printArray(int[] unsortiert, String msg) {   //?
    System.out.print(msg);                                        //?
      for (int i : unsortiert) {
      System.out.print(i + "| ");
    }
  System.out.println();
  }
}
 
Zuletzt bearbeitet:
X

Xyz1

Gast
Hm, und wir sollen jetzt Zeile für/um Zeile kommentieren?

Also Allgemeines, selectionsort kann man sich wie ein Kartenspiel vorstellen, es wird wiederholt die kleinste oder größte Karte gewählt und ans Ende oder an den Anfang verschoben, zum Schluẞ ist das ganze Kartenspiel sortiert.

Hilft das dem Verständnis schon?

"Ich kann die Syntaxregeln nicht." - Dabei kann ein Forum nur bedingt helfen... a = b; ist zum Beispiel eine Zuweisung von b an a. Das alles zu erklären dauert sehr lange.
 

mihe7

Top Contributor
Das einzige was mir dazu einfallen würde wäre, dass das oben erstellte Array quasi in selectionSort "kopiert" wird
Das ist für den Anfang schon nicht schlecht: tatsächlich wird die Methode selectionSort aufgerufen und als Parameter wird eine Referenz auf das Array übergeben. Die Methode liefert keinen Rückgabewert (void). Trotzdem ist nach der Ausführung das Array sortiert.

Erkläre, warum das funktioniert.
 

newuser1337

Mitglied
Das ist für den Anfang schon nicht schlecht: tatsächlich wird die Methode selectionSort aufgerufen und als Parameter wird eine Referenz auf das Array übergeben. Die Methode liefert keinen Rückgabewert (void). Trotzdem ist nach der Ausführung das Array sortiert.

Erkläre, warum das funktioniert.
Ah ok also wir haben eine Methode selectionSort erstellt. Diese wird aufgerufen und das Array wird durchlaufen. Zuerst wird das allererste Element als kleinsteZahl gesetzt und daraufhin läuft erneut eine weitere Schleife durch, die überprüft ob ein kleineres Element vorhanden ist. Wird ein kleineres Element gefunden, so wird es als kleinsteZahl gesetzt und direkt mithilfe der Zwischenvariable tmp mit der vorher gewesenen kleinsten Zahl vertauscht (Hoffe ich konnte es verständlich erklären). Kannst du das bitte erstmal korrigieren oder bestätigen bevor ich sonst weiter falsches Zeug rede? :D
 

mihe7

Top Contributor
Das ist m.E. in Ordnung, aber die Erklärung geht an meiner Frage vorbei :)

Ich stelle sie mal anders:
Java:
public class Test {
        public static void increaseInt(int a) {
            a++;
        }

        public static void increaseArray(int[] a) {
            a[0]++;
        }
        public static void main(String[] args) {
            int x = 5;
            increaseInt(x);
            System.out.println("Fall 1: " + x);

            int[] y = {5};
            increaseArray(y);
            System.out.println("Fall 2: " + y[0]);
        }
}

Warum liefert increaseInt nicht das gewünschte Ergebnis, increaseArray aber schon?
 

temi

Top Contributor
Beispielsweise die Zeile des letzten Kommentars System.out.print(msg); wieso diese z.B. notwendig ist

Hast du die Möglichkeit den Code auszuprobieren?

Dann lass die Zeile doch einfach weg (oder kommentiere sie aus).

Ansonsten ist auch "printArray" nur eine weitere Methode, diesmal mit zwei Parametern. Der erste ist eine Referenz auf ein Array und der andere ein String. Dieser String wird mit der von dir genannten Anweisung ausgegeben. In der "main()" wird die Methode "printArray" zwei mal aufgerufen und was steht jeweils in diesem Parameter?

Edit:

Der Name des "int[]"-Parameters ist allerdings ziemlich unglücklich gewählt.
 

newuser1337

Mitglied
Hast du die Möglichkeit den Code auszuprobieren?
Ja, das ist der Output mit der Zeile:
Java:
Unsortiert: 4| 1| 6| 5| 2| 7| 3| 9| 8|
Sortiert: 1| 2| 3| 4| 5| 6| 7| 8| 9|

Und hier ist der Output ohne die Zeile:
Java:
4| 1| 6| 5| 2| 7| 3| 9| 8|
1| 2| 3| 4| 5| 6| 7| 8| 9|
Also stimmt schon, war mein Fehler die Zeile wäre garnicht mal so notwendig gewesen.
Der erste ist eine Referenz auf ein Array und der andere ein String. Dieser String wird mit der von dir genannten Anweisung ausgegeben.
Stimmt das macht natürlich Sinn. Danke!
 

newuser1337

Mitglied
Danke für die Antworten, ich glaube ich hab's soweit verstanden :) Ich würde aber interessehalber gerne trotzdem wissen warum hier nur increaseArray den "korrekten" Wert ausgibt
Java:
public class Test {
        public static void increaseInt(int a) {
            a++;
        }

        public static void increaseArray(int[] a) {
            a[0]++;
        }
        public static void main(String[] args) {
            int x = 5;
            increaseInt(x);
            System.out.println("Fall 1: " + x);

            int[] y = {5};
            increaseArray(y);
            System.out.println("Fall 2: " + y[0]);
        }
}
 

mihe7

Top Contributor
Danke für die Antworten, ich glaube ich hab's soweit verstanden :) Ich würde aber interessehalber gerne trotzdem wissen warum hier nur increaseArray den "korrekten" Wert ausgibt
Die Frage impliziert, dass Du es noch nicht verstanden hast :)

Java übergibt Parameter immer als Kopie des betreffenden Werts. Bei sog. primitiven Typen (byte, short, int, long, float, double, char) wird tatsächlich einfach der Wert kopiert. D. h. im Beispiel ist increaseInt(x) ist identisch zu increaseInt(5). Der Parameter a ist dann einfach die Zahl 5. Mit der kannst Du in increaseInt anstellen, was Du willst: da es nur eine Kopie ist, wirkt sich das auf x nicht aus.

Bei komplexen Typen (Objekte - ein Array ist in Java auch nur ein Objekt) wird auch eine Kopie übergeben, aber nicht des Objekts selbst, sondern nur eine Kopie der Referenz (=Adresse des Objekts im Speicher). Daher verweisen y und der Parameter a in increaseArray auf das selbe(!) Objekt. D. h. a[0]++ in increaseArray erhöht tatsächlich das selbe(!) Element, also y[0].

Um das mal bildlich zu verdeutlichen, die beiden Fälle:
1. ich schreibe auf einen Zettel eine Zahl, gebe Dir eine Kopie des Zettels und jetzt kannst Du mit dem Zettel (der Zahl) machen, was Du willst: es wird sich auf meinen Zettel nicht auswirken.

2. ich hänge eine Bestell-Liste auf. Jetzt schreibe ich auf einen Zettel: "Erhöhe die Anzahl der Bestell-Liste", diesen Zettel kopiere ich und gebe ihn Dir. Jetzt hast Du keine Kopie der Liste sondern nur eine Kopie der Referenz auf diese Liste bekommen. Du weißt also, wo die "Bestell-Liste" zu finden ist und änderst sie. Da wir beide von der selben(!) Bestell-Liste reden, hat sich tatsächlich die selbe Liste geändert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T SelectionSort Java Java Basics - Anfänger-Themen 1
F Java Selectionsort Java Basics - Anfänger-Themen 4
A SelectionSort bringt keine konstanten Ergebnisse Java Basics - Anfänger-Themen 4
M Selectionsort Java Basics - Anfänger-Themen 5
T Methoden Selectionsort funktioniert nicht Java Basics - Anfänger-Themen 2
T Methoden selectionsort Java Basics - Anfänger-Themen 8
X Selectionsort macht Probleme Java Basics - Anfänger-Themen 2
S SelectionSort und InsertionSort Java Basics - Anfänger-Themen 1
A SelectionSort >InsertSort< Java Basics - Anfänger-Themen 4
I SelectionSort sortiert nicht richtig! Java Basics - Anfänger-Themen 2
A SelectionSort Java Basics - Anfänger-Themen 2
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
Ü Dead Code im Programm? Java Basics - Anfänger-Themen 13
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
terashy VS Code Project run error Java Basics - Anfänger-Themen 10
JaZuDemNo Code Erklärung Java Basics - Anfänger-Themen 3
M Connect-4-Code analysieren Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
W In alten Code zurück- und dort wieder zurechtfinden? Java Basics - Anfänger-Themen 17
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
T Fehlercode bei code der das Alter ausrechnet Java Basics - Anfänger-Themen 2
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
jhfjeh Strukturgramm in code Java Basics - Anfänger-Themen 11
D Tipps zum Code Java Basics - Anfänger-Themen 24
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
ohneInformatik; For Schleife. Was macht dieser Code?? Java Basics - Anfänger-Themen 5
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
W Rückfrage zur Programmgestaltung (clean code) Java Basics - Anfänger-Themen 12
M intelliJ auf neuem PC, plötzlich kein Code Java Basics - Anfänger-Themen 3
Pinhg Sound in Greenfoot Code einbinden Java Basics - Anfänger-Themen 2
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
J Größter gemeinsamer Teiler: mein Code Java Basics - Anfänger-Themen 6
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
A Wie könnte man diesen Code kürzer machen ? Java Basics - Anfänger-Themen 7
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
S Hilfe bei Umänderung von Java Code Java Basics - Anfänger-Themen 16
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
K Wie kann man diesen Code schnell und effizient interpretieren (Man hat nur 4 Minuten) Java Basics - Anfänger-Themen 3
R ISBN-10-Code überprüfen Java Basics - Anfänger-Themen 7
I Bitte um Hilfe zu unterstehenden Code Java Basics - Anfänger-Themen 6
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
I HTML Code säubern Java Basics - Anfänger-Themen 4
B Brauche Hilfe zu einem Code Java Basics - Anfänger-Themen 5
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
N Java-Code abwärtskompatibel machen Java Basics - Anfänger-Themen 4
J Erste Schritte Was mache ich in meinem Code falsch. Java Basics - Anfänger-Themen 3
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
S Compiler-Fehler Nicht adressierbarer Code ( Non-addressable code ) Java Basics - Anfänger-Themen 5
Aemulit Java Schaltjahr berechnen Code Java Basics - Anfänger-Themen 7
A Code Problem Java Basics - Anfänger-Themen 6
C Fehler im Code Java Basics - Anfänger-Themen 10
A Zu einem bestimmten Ort im Code springen Java Basics - Anfänger-Themen 11
L Ist der Code richtig Java Basics - Anfänger-Themen 3
josfe1234 code vereinfachen Java Basics - Anfänger-Themen 15
nonickatall Ausführbarkeit von Code testen bzw. Remote Debugging Java Basics - Anfänger-Themen 4
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
G Programm Code Java Basics - Anfänger-Themen 5
C Code zusammenfassen Java Basics - Anfänger-Themen 5
I Erklärung zum Java Code Java Basics - Anfänger-Themen 2
T Programmablaufsplaninterpretation in Code umformen Java Basics - Anfänger-Themen 1
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
AlexVo String zu Java Anweisung getString("*** java code ***") Java Basics - Anfänger-Themen 19
M ISBN-Code Java Basics - Anfänger-Themen 26
B Zeitgleiches Arbeiten am Code mit mehreren Personen? Java Basics - Anfänger-Themen 7
S Wie kann ich bei diesem Code erreichen, das als Ergebnis hier 15 herauskommt? Java Basics - Anfänger-Themen 23
N Kann man den Code vereinfachen? Java Basics - Anfänger-Themen 25
marcooooo Code erklären Java Basics - Anfänger-Themen 28
marcooooo Code erklären Java Basics - Anfänger-Themen 4
S Advent of Code Day4 Java Basics - Anfänger-Themen 4
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
Gaudimagspam Caesars Code entziffern in Java Java Basics - Anfänger-Themen 8
Lukasbsc Wie kann ich meinen Code optimieren? Java Basics - Anfänger-Themen 4
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
T Main startet nicht bei vorgegebenen Code Java Basics - Anfänger-Themen 41
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
M Code nur für Cracks? Crack the Passwort Übung Java Basics - Anfänger-Themen 7
parrot Code entferneJedeZweiteZiffer Java Basics - Anfänger-Themen 6
G Code kürzen Java Basics - Anfänger-Themen 5
Bluedaishi Source Code Signieren Java Basics - Anfänger-Themen 22
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6
L Best Practice Code refactern Java Basics - Anfänger-Themen 30
G code kürzen Java Basics - Anfänger-Themen 16
A Code umschreiben Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben