A
Ich glaube, Du hast da ein Problem mit dem Prinzip der Rekursion.
1. Wenn Du die Zahl ausgibst, BEVOR der rekursive Aufruf gemacht wird, dann wird das Programm die höchste Zahl ausgeben, die es bis dahin ermittelt hat, danach die Funktion rekursiv erneut starten, und dann im wiederum die grösste bis dahin ermittelte Zahl ausgeben, etc.
Als Beispiel folgende Funktion:
void func1(int n)
{
cout << n << endl;
if (n>0) func1(n-1);
}
Wenn Du im Programm diese Funktion mit func1(10) aufrufst, geschieht folgendes:
Die Funktion gibt als erstes die Zahl n (im diesem Fall wäre das 10) aus, danach ruft sie sich selbst auf und zieht dabei 1 von n ab, falls n grösser als 0 ist. Nun wird wiederum n ausgegeben (jetzt 9) und wieder ruft sich die Funktion rekursiv auf, etc. Die Ausgabe wird also von 10 an rückwärts bis 0 zählen.
2. Wenn Du die Zahl ausgibst, NACHDEM der rekursive Aufruf gemacht wurde, dann wird die Funktion solange ohne Ausgabe aufgerufen, bis die Abbruchbedingung erreicht ist. Dann gibt das Programm die ermittelte Zahl aus (das ist jetzt die kleinste Zahl...) und springt zurück zur aufrufenden Funktion, und arbeitet diese weiter ab. Dort steht jetzt wieder die Anweisung zur Ausgabe einer Zahl, usw. bis Du wieder beim ersten Funktionsaufruf gelandet bist, in dem dann die grösste Zahl ausgegeben wird.
Analog zu oben kann man als Beispiel schreiben:
void func2(int n)
{
if (n>0) func2(n-1);
cout << n << endl;
}
Wenn man diese Funktion mit func2(10) aufruft, dann zählt die Ausgabe aufwärts von 0 bis 10. Denn zuerst wird immer func2(n-1) aufgerufen, bis n==0 ist. Und erst dann wird n ausgegeben. In diesem Fall ist natürlich die erste Ausgabe 0.
Dein Sortieralgorithmus hat vollkommen richtig sortiert, d.h. die Elemente sind am Schluss tatsächlich von klein nach gross angeordnet. Du kannst das überprüfen, indem Du in der main-Funktion nach dem Sortieren noch alle Elemente des Arrays ausgibst:
for(i=0; i<max; ++i)
cout << vektorHugo[i] << endl;
Die sind jetzt alle schön von klein nach gross sortiert.
Gruss, Andreas