Hallo Zusammen,
ich habe meinen Code noch einmal komplett überarbeitet. Ich hab Quicksort zuerst mit int-Werten implementiert und jetzt in String umgewandelt. Leider funktioniert mein Vergleich nicht richtig, so dass meine Liste nur zum teil sortiert wird.
ich habe meinen Code noch einmal komplett überarbeitet. Ich hab Quicksort zuerst mit int-Werten implementiert und jetzt in String umgewandelt. Leider funktioniert mein Vergleich nicht richtig, so dass meine Liste nur zum teil sortiert wird.
Java:
public class Quicksort {
/**
* Hilfsmethode zum Vertauschen zweier Elemente
*
* @param personenListe
* @param idx1
* @param idx2
*/
public static void tausche(Person[] personenListe, int links, int rechts) {
Person tmp = personenListe[links];
personenListe[links] = personenListe[rechts];
personenListe[rechts] = tmp;
}
/**
* Hilfsmethode zum Zerlegen der Folge
*
*/
public static int partition(Person[] personenListe, int unten, int oben, int pivot) {
int pn = unten; // Untergrenze
Person pv = personenListe[pivot]; // PivotElement
// PivotElement an das Ende vershieben
tausche(personenListe, pivot, oben);
for (int i = unten; i < oben; i++) {
if ((personenListe[i].Equals(pv))) {
tausche(personenListe, pn++, i);
}
}
// PivotElement an die richtige Position kopieren
tausche(personenListe, oben, pn);
// neue PivotPosition zurückgeben
return pn;
}
/**
* Hilfmethode zum rekursiven Sortieren
*
*/
public static void qSort(Person[] personenListe, int unten, int oben) {
// PivotElement bestimmen
int pivot = (unten + oben) / 2;
if (oben > unten) {
// Feld zerlegen
int pn = partition(personenListe, unten, oben, pivot);
// und Partitionen zerlegen
qSort(personenListe, unten, pn - 1);
qSort(personenListe, pn + 1, oben);
}
}
public Person[] quickSort(Person[] personenListe) {
qSort(personenListe, 0, personenListe.length - 1);
return personenListe;
}
// public static void main(String[] args) {
// Person[] unsortiert = { "F H A B C R D E" };
// System.out.println("F H A B C R D E");
// Person[] sortiert = quickSort(unsortiert);
// for (int i = 0; i < sortiert.length; i++) {
// System.out.print(sortiert[i] + " ");
// }
//
// }
}
Zuletzt bearbeitet: