Array sortieren
-
Hallo!
Ich verzweifle bald an folgendem Programm. Irgendwie will es nicht funzen. Der Sortieralgorithmus müsste eigentlich soweit gehen. Diesen habe ich schonmal in etwas änlichem verwendet (in Zusammenhang mit Funktionen und Pointern)
Aber irgendwie will das Programm ohne solche Funktionen nicht so richtig das machen, was es eigentlich soll.
#include <stdio.h> #include <conio.h> #include <iostream> using namespace std; int main() { int A[10], B[10], n, min, max, i, vergleich, j; srand ( time(NULL) ); for (n = 0; n < A[10]; n++) { A[n]=n; A[n]=rand()%10; cout.width(2); cout.fill(' '); cout <<A[n]; } for (n = 1; n < A[10]; n++) { vergleich = A[n]; j = A[n]; while (j > 0 && A[j - 1] > vergleich) { A[j] = A[j - 1]; j--; } A[j] = vergleich; } cout <<endl; cout <<endl; for (n = 0; n <= A[10]; n++) { cout.width(2); cout.fill(' '); cout <<A[n]; } getch(); }Wenn ich jetzt selbst den Sortiervorgang erstmal ausklammere, dass dieser erstma nicht mit abgearbeitet wird, kommt nach der zweien Schleife nichtmal das raus, was er oben durch die Randomfunktion den Arraywerten zugeteilt hat.

Wäre super wenn ihr mir hierbei mal weiterhelfen könntet. Ist sehr wichtig.
Gruss
Tom
-
Hi!
Habs jetzt doch hinbekommen. Eine Frage habe ich aber noch. In der zwei anderen Schleifen habe ich jetzt A[10] durch die Variable "i" ersetzt. Das war der Grund warum das obere Programm nicht ging. Aber warum ging das mit n < A[10] nicht? In dieser steht doch eigentlich auch drin, wieviel Durchläufe er machen soll.

#include <stdio.h> #include <conio.h> #include <iostream> using namespace std; int main() { int A[10], B[10], n, min, max, i, vergleich, j; srand ( time(NULL) ); for (n = 0; n < A[10]; n++) { i++; A[n]=n; A[n]=rand()%10; cout.width(2); cout.fill(' '); cout <<A[n]; } for (n = 1; n <= i; n++) { vergleich = A[n]; j = n; while (j > 0 && A[j - 1] > vergleich) { A[j] = A[j - 1]; j--; } A[j] = vergleich; } cout <<endl; cout <<endl; for (n = 0; n <= i; n++) { cout.width(2); cout.fill(' '); cout <<A[n]; } cout <<"\n\n"; cout <<"Minimum: " <<A[0]; cout <<"\nMaximum: " <<A[10]; getch(); }gruss
Tom
-
A[10] ist der Wert hinter deinem Array (dein Array geht bis A[9]). Was da drin steht, ist mehr oder weniger zufällig, und hat nichts mit der Anzahl der Durchläufe zu tun. Auch A[9] wäre falsch. Du musst zwischen dem Index eines Elements und dem Inhalt unterscheiden.
-
Oder meinst du, das klappt, weil du A[n] auf n setzt? Das bringt leider gar nichts, weil du A[n] gleich in der nächsten Zeile wieder überschreibst. Du kannst in einem int nicht zwei Werte ablegen, und dann hoffen, dass der Compiler auf magische Weise mit dem richtigen arbeitet.