Java code zum Zahlenreihe sortieren funktioniert nicht?

orochi02  09.12.2021, 08:56

why schickst du nur einen ausschnitt von deinem quellcode? schick doch alles, weil wir sehen nicht mal den teil vom quellcode wo die variablen, die du manipulierst, dklariert wrdn

einenby 
Fragesteller
 09.12.2021, 09:07

Vor diesem abschnitt wird noch eine Zahlen reihe erzeugt, alle Variabeln sind int, "Zahlenreihe" und "Sortierung " sind arrays

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Im ersten Durchgang setzt du den Wert von max auf die höchste Zahl des Arrays.

Wie soll dann im zweiten Durchgang "zahlenreihe[i] > max" true sein?

Vor der Suche des neuen Maximums musst du max noch zurücksetzen:

public static void maximum() {
  max = -1; //Max zurücksetzen
  for(int i=0; i < 10; i++) {
    ...
  }
}
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
MrAmazing2  09.12.2021, 09:08

Dein Code sollte jetzt eigentlich funktionieren, oder?

Ansonsten sehe ich nämlich keinen Fehler. (Vorausgesetzt die Zahlen im Array sind alle Positiv)

0

Hallo,

schau dir mal den Quicksort Algorithmus an, die schnellste Form der Sortierung mit rekursivem (selbstgerichtetem) Aufruf.

Quicksort – Wikipedia

hier im allgemeinen Pseudo code (leicht umzusetzen)

  funktion quicksort(links, rechts)
     falls links < rechts dann
         teiler := teile(links, rechts)
         quicksort(links, teiler - 1)
         quicksort(teiler + 1, rechts)
     ende
 ende

Die folgende Implementierung der Funktion 

teile

 teilt das Feld so, dass sich das Pivotelement an seiner endgültigen Position befindet und alle kleineren Elemente davor stehen, während alle größeren danach kommen:

 funktion teile(links, rechts)
     i := links
     // Starte mit j links vom Pivotelement
     j := rechts - 1
     pivot := daten[rechts]

     wiederhole solange i < j // solange i an j nicht vorbeigelaufen ist 
         // Suche von links ein Element, welches größer oder gleich dem Pivotelement ist
         wiederhole solange i < rechts und daten[i] < pivot
             i := i + 1
         ende

         // Suche von rechts ein Element, welches kleiner als das Pivotelement ist
         wiederhole solange j > links und daten[j] >= pivot
             j := j - 1
         ende

         falls i < j dann
             tausche daten[i] mit daten[j]
         ende
     ende
    

     // Tausche Pivotelement (daten[rechts]) mit neuer endgültiger Position (daten[i])
     // und gib die neue Position des Pivotelements zurück, beende Durchlauf
     falls daten[i] > pivot dann
         tausche daten[i] mit daten[rechts]
     ende
     antworte i
 ende

Du scheinst weder so richtig zu verstehen, wann man static nutzt, noch wie man mit Methoden generell arbeitet. Das bitte unbedingt nochmal nachschlagen.

Ein sinnvoller Aufbau könnte sein:

public static int[] maximum(int...numbers) {
    for (int i = 0; i < numbers.length; ++i)
        for (int j = i; j < numbers.length; ++j)
            if (numbers[i] > numbers[j]) {
                int temp = numbers[i];
                numbers[i] = numbers[j];
                numbers[j] = temp;
            }

    return numbers;
}

Beispielhafte Aufrufe:

int[] arr = maximum(1,4,3,5,4,7,8,9,0,111,12,13,31,5);
int[] arr = maximum(new int[] {1,4,3,5,4,7,8,9,0,111,12,13,31,5});