Ich sollte das QuickSort-Verfahren programmieren, doch leider funktioniert der Algorithmus nicht. Bitte um Hilfe!
Diese Methode wird von der Test-Klasse aufgerufen.
[HIGHLIGHT="Java"]
public <T extends Comparable<T>> void sort(T[] list) {
qsort(list, 0, list.length - 1);
}
[/HIGHLIGHT]
[HIGHLIGHT="Java"]
protected <T extends Comparable<T>> void qsort(T[] list, int u, int o) {
if (o > u) {
int i = zerlege(list, u, o);
qsort(list, u, i - 1);
qsort(list, i + 1, o);
}
[/HIGHLIGHT]
[HIGHLIGHT="Java"]
private <T extends Comparable<T>> int zerlege(T[] list, int u, int o) {
int p = (u + o) / 2;
while (u <= o) {
int l = u;
int r = p + 1;
for (int i = u; i < p - 1; i++) {
if (list.compareTo(list[p]) >= 0) {
l = i;
break;
}
}
for (int i = p + 1; i < o; i++) {
if (list.compareTo(list[p]) < 0) {
r = i;
break;
}
}
if (l <= r) {
vertausche(list, l, r);
u = l + 1;
o = r - 1;
}
}
return o;
}
[/HIGHLIGHT]
[HIGHLIGHT="Java"]
private <T> void vertausche(T[] list, int l, int r) {
T temp = list[l];
list[l] = list[r];
list[r] = temp;
}
[/HIGHLIGHT]
Diese Methode wird von der Test-Klasse aufgerufen.
[HIGHLIGHT="Java"]
public <T extends Comparable<T>> void sort(T[] list) {
qsort(list, 0, list.length - 1);
}
[/HIGHLIGHT]
[HIGHLIGHT="Java"]
protected <T extends Comparable<T>> void qsort(T[] list, int u, int o) {
if (o > u) {
int i = zerlege(list, u, o);
qsort(list, u, i - 1);
qsort(list, i + 1, o);
}
[/HIGHLIGHT]
[HIGHLIGHT="Java"]
private <T extends Comparable<T>> int zerlege(T[] list, int u, int o) {
int p = (u + o) / 2;
while (u <= o) {
int l = u;
int r = p + 1;
for (int i = u; i < p - 1; i++) {
if (list.compareTo(list[p]) >= 0) {
l = i;
break;
}
}
for (int i = p + 1; i < o; i++) {
if (list.compareTo(list[p]) < 0) {
r = i;
break;
}
}
if (l <= r) {
vertausche(list, l, r);
u = l + 1;
o = r - 1;
}
}
return o;
}
[/HIGHLIGHT]
[HIGHLIGHT="Java"]
private <T> void vertausche(T[] list, int l, int r) {
T temp = list[l];
list[l] = list[r];
list[r] = temp;
}
[/HIGHLIGHT]
Zuletzt bearbeitet: