Codeerklärung benötigt

Ruderer1993

Aktives Mitglied
Hallo,
ich habe hier einen Selection Sort Algorithmus, den ich vorgegeben bekommen habe. Mein Programm funktioniert einwandfrei aber ich versuche trotzdem den Code zu verstehen, was mir nicht gelingen will.
Für alle diejenigen die nicht wissen wie der Selection Sort Algorithmus funktioniert:
Selectionsort

Dies ist mein Code:
Java:
public static void selectionSort(int[] x) {
        for (int i = 0; i < x.length - 1; i++) { //Man benötigt genau x.length -1 Durchläufe
            int minIndex = i;      // Index des momentanen kleinsten Wertes
            for (int j = i + 1; j < x.length; j++) { //Index wird um eins erhöht, wenn die Zahl an dem Index kleiner ist, als die Größe des Arrays erhöhe weiter,sodass er alle Zahlen durchgeht
                if (x[minIndex] > x[j]) { //Falls  das momentane Minimum kleiner ist als die Zahl am Index j
                    minIndex = j;  //Dann Speichere den Index des neuen minimalen Wertes
                }
            }
            if (minIndex != i) { //Falls der Index des minmalen Wertes nicht dem alten entspricht, also wenn ein neues Maximum gefunden wurde, dann
                //Tausche den Wert mit dem kleinsten verfügbaren Wert per Dreieckstausch
                int temp = x[i];
                x[i] = x[minIndex];
                x[minIndex] = temp;
            }
        }
    }


Sind die Kommentare richtig, also habe ich es richtig verstanden ?!
Danke !
 

Ruderer1993

Aktives Mitglied
Ich schätze du meinst, das ich das Wort Index falsch einsetzte ? Ich meinte dann eigentlich j aber schrieb Index...
Oder ist es etwas anderes ;) ?
 

Ruderer1993

Aktives Mitglied
bzw ist das Wort "momentane Minimum" irreführend weil es nicht der kleinste momentane Wert, sondern der kleinste momentane Index ist, richtig ?
 

ralfgc

Mitglied
Die Kommentare klingen für mich wie eine Übersetzung Java->Deutsch.
Was'n das für eine Aufgabe? Wenn das Ziel ist den Algorithmus durch
Kommentare zu erklären, dann fang an den Variablen wie i, j, x, temp, ...
sprechendere Namen zu geben.
Wenn du das kannst, brauchst du keine Kommentare mehr und hast den
Algorithmus verstanden.
Good luck
 

Ruderer1993

Aktives Mitglied
Ok habe nun mal meine Kommentare geändert und die Namen geändert, so wie ich denke das es passt
Java:
public static void selectionSort(int[] unsortedArray) {
        for (int index = 0; index < unsortedArray.length - 1; index++) { //Anzahl der Durchläufe optimieren
            int minIndex = index;  //Index des kleinsten Wertes am Anfang
            for (int indexVonZuVergleichenderZahl = index + 1; indexVonZuVergleichenderZahl < unsortedArray.length; j++) { //Gehe quasi alle Zahlen durch die verglichen werden sollen 
                if (unsortedArray[minIndex] > unsortedArray[indexVonZuVergleichenderZahl]) { //Falls die Zahl von der zu vergleichenden Zahl, kleiner ist als die die wir am Anfang als Minimum festgelegt haben 
                    minIndex = indexVonZuVergleichenderZahl; //Dann ist der Index der zu vergleichenden Zahl der neue Index des minimalsten Wertes
                }
            }
            if (minIndex != index) {  //Falls also der Index der kleinsten Zahl nun getauscht hat
                //Tausche den Wert mit dem kleinsten verfügbaren Wert per Dreieckstausch
                int temp = unsortedArray[index];
                unsortedArray[index] = unsortedArray[minIndex];
                unsortedArray[minIndex] = temp;
            }
        }
    }

Jetzt muss mir nur noch jemand sagen ob es auch stimmt ;) Danke
 

Michael...

Top Contributor
Die Kommentare sind m.M. nicht unbedingt Verständnis fördernd und ich habe mir den Code anschauen müssen, um die Kommentare zu verstehen ;-)
Index wird um eins erhöht, wenn die Zahl an dem Index kleiner ist, als die Größe des Arrays erhöhe weiter,sodass er alle Zahlen durchgeht

Hier ist aber der Kommentar definitv falsch:
[JAVA=5]if (x[minIndex] > x[j]) { //Falls das momentane Minimum kleiner ist als die Zahl am Index j[/code]
 

ralfgc

Mitglied
Neue und sogar optimierte Version:

Klasse
Code:
public class SelectionSort {

    public static void sort(int[] array) {
        for (int currentPosition = 0; currentPosition < array.length - 1; currentPosition++) {
            int newPosition = getNewPosition(array, currentPosition);

            if (newPosition != currentPosition) {
                swap(array, newPosition, currentPosition);
            }
        }
    }

    private static int getNewPosition(int[] array, int pos) {
        int biggerValuePosition = pos + 1;

        for (int i = pos; i < array.length; i++) {
            if (array[biggerValuePosition] > array[i]) {
                biggerValuePosition = i;
                break;
            }
        }

        return biggerValuePosition;
    }

    private static void swap(int[] ar, int from, int to) {
        int temp;

        temp = ar[from];
        ar[from] = ar[to];
        ar[to] = temp;
    }
}

Test
Code:
public class SelectionSortTest extends junit.framework.TestCase {
    private static int[] array;

    @Override
    public void setUp() throws Exception {
        array = new int[] {9, 6, 8, 5};
    }

    public void testSort() throws Exception {
        SelectionSort.sort(array);

        assertEquals(5, array[0]);
        assertEquals(6, array[1]);
        assertEquals(8, array[2]);
        assertEquals(9, array[3]);
    }
}
 

Ruderer1993

Aktives Mitglied
vielen Dank, weiß deine Mühe wirklich zu schätzen, doch ich wollte eigentlich wissen ob meine letzte Ausführung nun richtig war und nicht noch einen Code bekommen, wo ich nicht genau weiß ob ich ihn verstehe oder nicht
 
Zuletzt bearbeitet:

ralfgc

Mitglied
Ok,

Du könntest die Antwort aus meinem Code rauslesen aber ok.

erstmal...dein Code ist Denglisch.

> for (int index = 0; index < unsortedArray.length - 1; index++) { //Anzahl der Durchläufe optimieren
Das optimiert nix.

> int minIndex = index; //Index des kleinsten Wertes am Anfang
Das ist nicht "der kleinste Wert am Anfang". Das ist der mögliche Index in dem Array, wo der Wert
womöglich reingehört. Das KÖNNTE die gleiche Position sein.

> for (int indexVonZuVergleichenderZahl = index + 1; indexVonZuVergleichenderZahl < unsortedArray.length; j++) {
"Prüfe die folgenden Werte in dem Array"

> if (unsortedArray[minIndex] > unsortedArray[indexVonZuVergleichenderZahl]) {
"Habe ich eine Position weiter vorn gefunden?"

> if (minIndex != index) {
"Habe ich eine neue Position für den Wert gefunden?"

Hoffe ich habe jetzt nichts vermehrt :)
Den Rest und das mit dem Tauschen der Werte im Array kriegst sicher selber hin.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D GGT - Codeerklärung gesucht Java Basics - Anfänger-Themen 26
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
I BLOB / CLOB und Hibernate... Ratschläge benötigt Java Basics - Anfänger-Themen 10
B Regex Kombination benötigt Java Basics - Anfänger-Themen 5
I REST Api / JAX-RS, Swagger (OpenAPI) - generelle Starthilfen benötigt Java Basics - Anfänger-Themen 15
D Codeblöcke, die immer wieder im Programmverlauf benötigt werden Java Basics - Anfänger-Themen 5
Gaudimagspam Dringend Java Hilfe benötigt Java Basics - Anfänger-Themen 19
G Wofür benötigt man die Umgebungsvariablen sowohl in Windows 10 als auch in Mac OS Catalina Java Basics - Anfänger-Themen 19
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
L Kleine Hilfe beim Schreiben eines Programmes benötigt :D Java Basics - Anfänger-Themen 40
B Denkanstoß benötigt: Emails an bestimmte Emailadresse schicken Java Basics - Anfänger-Themen 6
S Schnelle Hilfe bei 2 kurzen Aufgaben benötigt Java Basics - Anfänger-Themen 2
M Klassen Klassendiagramm - Hilfe benötigt Java Basics - Anfänger-Themen 0
N Zeit berechnen, die für eine Strecke benötigt wird Java Basics - Anfänger-Themen 3
I Programmierung-Hausaufgabe: Hilfe benötigt Java Basics - Anfänger-Themen 8
H Wofür benötigt man ByteBuffer? Java Basics - Anfänger-Themen 5
B Kleine Erklärung zu einer Codezeile benötigt Java Basics - Anfänger-Themen 5
S Bisschen hilfe beim Sudoku Lösen benötigt Java Basics - Anfänger-Themen 7
J fileReader: wird dateipfad benötigt? Java Basics - Anfänger-Themen 8
M Denkanstoß für Umlaufzahl dringend benötigt! Java Basics - Anfänger-Themen 9
A for Zähl schleife hilfe benötigt Java Basics - Anfänger-Themen 12
J Anfänger Beispiele benötigt Java Basics - Anfänger-Themen 3
X Mit JSPs anfangen ... Was wird benötigt? Java Basics - Anfänger-Themen 5
C Hilfe bei Schleifen und Basics benötigt Java Basics - Anfänger-Themen 2
M Containerfile benötigt - aber wie? Java Basics - Anfänger-Themen 11
F Hilfe benötigt Java Basics - Anfänger-Themen 7
S 2 regex-Funktionen benötigt Java Basics - Anfänger-Themen 4
M Mails zum Server senden der Authentisierung benötigt Java Basics - Anfänger-Themen 3
D threadfehler: stischer zusamenhang benötigt. Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben