BubbleSort
-
Deine beiden for-Schleifen sind schonmal Nonsens. Also die Schleifenköpfe.
-
Sone schrieb:
...
Sone!
Willkommen zurück!
Grüße auch an Hacker!

-
Vielen Dank hustbaer ich schau nochmal rein villeicht komm he ich jetzt drauf.
-
Bitte um Hilfe ich komm echt nicht drauf habe jetzt folgendes
int main(int argc, char** argv) { const int max = 10; int A[max] = {0}; int n = 0, zahl; while (zahl != 0 && n <= max) { cout << "Integer (0 Abbruch): "; cin >> zahl; if (zahl != 0) A[n] = zahl; if (zahl != 0) n++; } for (int i = 1; i < n; i++) for (int j = 0; j <= n; j++) { if (A[j + 1] < A[j]) { int tmp = A[j + 1]; A[j + 1] = A[j]; A[j] = tmp; } } for (int i = 0; i < n; i++) cout << A[i] << " "; cout << endl; return 0; }
-
Kannst du deine Aufgabenstellung nochmal genau erklären ?
Lapa1503 schrieb:
Ich soll in einer Aufgabe den BubbleSort so umschreiben dass er nicht die kleinen Zahlen nach links schiebt sondern die großen nach rechts. Was mache ich falsch?
Wenn die kleinen Zahlen nach links geschoben werden, werden die großen folglich nach rechts geschoben, wo genau ist dein Problem ???
Ich habe deinen Code getestet und er funktioniert doch :
Integer (0 Abbruch): 2 Integer (0 Abbruch): 4 Integer (0 Abbruch): 6 Integer (0 Abbruch): 9 Integer (0 Abbruch): 1 Integer (0 Abbruch): 4 Integer (0 Abbruch): 5 Integer (0 Abbruch): 7 Integer (0 Abbruch): 0 1 0 0 2 4 4 5 6
-
Ich würde aber persönlich ne do-while schleife machen, sonst geht er garnicht erst in deine while rein, weil die bedingung nie erfüllt ist

-
BuhBuh schrieb:
Wenn die kleinen Zahlen nach links geschoben werden, werden die großen folglich nach rechts geschoben, wo genau ist dein Problem ???
Im Orginal 'blubbert' in einem Durchlauf eine kleine Zahl nach links, jetzt soll in einem Durchlauf eine grosse nach rechts 'blubbern'.
int n = 0, zahl; while (zahl != 0 && n <= max) {zahl ist nicht initialisiert. do...while würde sich sowieso anbieten, wenn du auf jeden Fall einmal eine Eingabe brauchst.
for (int i = 1; i < n; i++) for (int j = 0; j <= n; j++) {Deine beiden Schleifen laufen jeweils grob von 1 bis n. Vergleiche das mal mit dem Orginal.
if (A[j + 1] < A[j]) {Was soll A[n+1] sein?
-
naja woher kommen denn die nullen?
-
okay mein code funktioniert wenn die do while schleife durch das überfüllen des arrays abgebrochen wird warum kriege ich bei einem abbruch mit "0" ein falsches ergebnis
Integer (0 Abbruch): 4 Integer (0 Abbruch): 2 Integer (0 Abbruch): 1 Integer (0 Abbruch): 0 0 0 1
-
der aufwand der schleife bleib doch gleich oder? O(n^2)
-
Ja und? Es geht ja sowieso nicht um performance, aber es deutet darauf hin, dass du nicht wirklich weisst, was du bzw. Bubblesort mach(s)t.
-
Ich schaue ob A[0] größer ist als A[1] wenn ja sollen beide vertauscht werden.
Dann geht der zähler hoch und schaut ob A[1] nun größer ist als A[2] wenn ja tausch wenn nein kein tausch. So schwer ist das ja nicht ich glaube nur dass irgendwas mit der Abbruchfunktion nicht stimmt.
-
Ja, es ist einfach. Daher wundert es mich auch, dass du den bereits sortierten Bereich auch weiterhin sortierst. Egal.
Jockelx schrieb:
if (A[j + 1] < A[j]) {Was soll A[n+1] sein?
Selbe Frage für A[n].
-
n=0
und A[n+1] bedeutet A[1]
und A[n] bedeutet A[0]
wenn nun A[1]<A[0]->tausch
n++
-
Ich meinte schon konkret A[n+1].
Dein j in der inneren Schleife ist im letzten Durchlauf j=n.Aber was ist A[j+1] (also A[n+1]) bestenfalls?
("Bestenfalls", falls n < max)
-
Achso jetzt verstehe ich. wenn ich einen array mit der größe 10 habe würde er ja dann A[11] vergleichen...hmm weiss leider nur nicht wie ich das beheben kann
-
???
Dann denk nochmal drüber nach...
-
Wenn du ein Array mit 10 Elementen füllst
ist der Index 10 für dich unzugänglich!
Also es fängt bei 0 an und endet bei 9