Java code zum Zahlenreihe sortieren funktioniert nicht?
Der Code soll eine Zahlenreihe Sortierern, die ausgabe wiederholt aber nur das erste Maximum der Zahlenreihe, obwohl die stelle dieses sich in lmax gemerk wurde und stelle lmax in der reihe auf -1 gesetz werden sollte, wo liegt mein Fehler?
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
Vor diesem abschnitt wird noch eine Zahlen reihe erzeugt, alle Variabeln sind int, "Zahlenreihe" und "Sortierung " sind arrays
3 Antworten
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++) {
...
}
}
Dein Code sollte jetzt eigentlich funktionieren, oder?
Ansonsten sehe ich nämlich keinen Fehler. (Vorausgesetzt die Zahlen im Array sind alle Positiv)
Hallo,
schau dir mal den Quicksort Algorithmus an, die schnellste Form der Sortierung mit rekursivem (selbstgerichtetem) Aufruf.
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});