Hallo zusammen,
ich versuche mich nun seit ein paar Wochen in Java.
Nun versuche ich aus einer gegebenen Liste das k-t größte Element zu finden, OHNE diese vorher zu sortieren...
Mein Denkansatz war das:
Meine Probleme:
a) soll das Programm beim ersten If abbrechen, ich weiß allerdings nicht wie. (return geht nicht, da ein Int zurückgegeben werden muss)
b) wenn ich (testweise) oben return 0; eingebe, dann sagt mit Eclipse, dass ich ein Int zurückgeben muss. Also dass die Möglichkeit besteht, dass ich niemals auf ein return treffe... aber warum?
c) funktioniert der Code so überhaupt? :bahnhof:
Vielen Dank schonmal :toll:
ich versuche mich nun seit ein paar Wochen in Java.
Nun versuche ich aus einer gegebenen Liste das k-t größte Element zu finden, OHNE diese vorher zu sortieren...
Mein Denkansatz war das:
Java:
public static int select( int [] A, int k, int index, int zaehler) { //beim Aufruf muss index = A.length und zaehler = 0 sein.
if ( k > A.length)
return; //an dieser Stelle soll das Programm abbrechen...?
if (k > 0){
int n = A.length;
int [] TMP = new int [n-1];
int ind = 0;
int max = A[ind];
k--; // k wird bei jedem jekursiven Aufruf verkleinert. Ist k = 0, so habe ich das k-t größte Element gefunden.
for (int i = 1; i < n; i++) {
if (A[i] > max) {
max = A[i];
ind = i;
}
}
for (int x = 0; x < ind; x++) // hier wird die alte Liste in eine neue kopiert, das bisher größte Element wird dabei ausgelassen
TMP[x] = A[x];
for (ind++; ind < n; ind++)
TMP[ind] = A[ind];
if (ind < index)
select(TMP, k, ind, zaehler);
else {
zaehler++; // zaehler soll sicherstellen, dass der Index nicht durch den rekursiven aufruf verfälscht wird
select(TMP, k, ind+zaehler, zaehler);
}
}
else
return index;
}
Meine Probleme:
a) soll das Programm beim ersten If abbrechen, ich weiß allerdings nicht wie. (return geht nicht, da ein Int zurückgegeben werden muss)
b) wenn ich (testweise) oben return 0; eingebe, dann sagt mit Eclipse, dass ich ein Int zurückgeben muss. Also dass die Möglichkeit besteht, dass ich niemals auf ein return treffe... aber warum?
c) funktioniert der Code so überhaupt? :bahnhof:
Vielen Dank schonmal :toll:
Zuletzt bearbeitet: