Blubblesort Ausgabe
-
Hi Leute,
bin noch blutiger Anfänger in C++ und grade am Lernen. Meine aktuelle Aufgabe ist es, einen einfachen Sortieralgo Anhand von Bubblesort zu machen. Dabei ist alles in einer Klasse gekapselt.
Mittlerweile funktioniert das schon ziemlich gut. Das einzige Problem welches ich habe, dass ich die Zwischenschritte ausgeben muss. Dabei hab ich mir einfach einen integer als flag definiert und diesen einfach auf 0 ändere wenn nichts passiert ist. Ich soll nun 9 3 5 6 1 7 2 0 8 4 sortieren. Meine Ausgabe lautet:
9 3 5 6 1 7 2 0 8 4
Sortiere ...- 3 5 6 1 7 2 0 8 4 9
- 3 5 1 6 2 0 7 4 8 9
- 3 1 5 2 0 6 4 7 8 9
- 1 3 2 0 5 4 6 7 8 9
- 1 2 0 3 4 5 6 7 8 9
- 1 0 2 3 4 5 6 7 8 9
- 0 1 2 3 4 5 6 7 8 9
- 0 1 2 3 4 5 6 7 8 9
Sortierte Liste:
0 1 2 3 4 5 6 7 8 9
Funktioniert alles bestens, aber ich hab halt den letzten Schritt doppelt ausgegeben. Ist ja auch klar. Davor hatte sich noch etwas geändert also läuft er noch einmal durch, dann ist keine änderung mehr vorhanden und es wird abgebrochen. In der Aufgabenstellung wird nun aber die Zeile
nicht mehr ausgeben. Hat jemand eine Idee, wie ich das implementieren kann?Vielen Dank!!!
#include<iostream> #include"Bubblesort.h" using namespace std; void Bubblesort::sort( int *array, int size ) { int flag=1; int zaehler=0; print(); cout << endl; cout << "Sortiere ..." << endl; cout << endl; for(int i = 0; i < size -1 && flag; ++i) { flag=0; for (int j=0; j < size -i -1; j++) { // check ob kleiner als vorgänger if (A[j] > A[j + 1]) { // Werte vertauschen swap(j); // es wurde etwas verändert flag=1; } } zaehler++; cout << zaehler << ") "; print(); cout << endl; } } void Bubblesort::swap(int j){ int tmp = A[j]; A[j] = A[j +1]; A[j + 1] = tmp; } void Bubblesort::print() { //cout << endl; for (int i=0; i<size; i++) { cout << A[i] << " "; } }
-
if (flag) print();??
wahrscheinlich zu einfach, da wärst du ja selber drauf gekommen, wenn du einen Bubble Sort hinkriegst...
Ein besserer Typ für flag wäre übrigens bool.
-
Natürlich! Das war es.
Nach x Stunden programmieren sieht man manchmal den Wald vor lauter Bäumen nicht mehr. Danke!!!