Benutzer mit den meisten Antworten
QuickSort - ProgressBar

Frage
-
Guten Tag Community,
währen einer Sortierung soll meine ProgressBar den Fortschritt anzeigen. Dazu benötige ich einen Zahlenwert der meiner ProgressBar übergeben wird. Beim Quicksort berechnet sich die Laufzeit (im besten Fall) n*log2(n), da ich mich in der Umgebung von C++ befinde habe ich die Formel dementsprechend umgeformt. Hier mal der Code- Ausschnitt damit es verständlicher wird.void Sortieren::quicksort(int *ar_quick, int left, int right, int array_size, int &counter) { int i = left; int j = right; int tmp; int pivot = ar_quick[(left + right) / 2]; double progressvalue; //partion while (i <= j) { while (ar_quick[i] < pivot) i++; while (ar_quick[j] > pivot) j--; if (i <= j) { counter++; tmp = ar_quick[i]; ar_quick[i] = ar_quick[j]; ar_quick[j] = tmp; i++; j--; } }; progressvalue = counter*100/ (array_size (log10(array_size)/log10(2))); myFormControl1->UpdateQuickSort("",progressvalue); //recursion if (left<j) quicksort(ar_quick, left, j,array_size, counter); if (i<right) quicksort(ar_quick, i, right,array_size, counter); }
Ich habe den Counter mit an die Funktion übergeben, damit dieser bei der Rekursion nicht wieder auf Null gesetzt bzw. einen runtergezählt wird. Ich hatte schon überlegt den Counter noch ebenfalls beim direkten Vergleich mit einzufügen aber das ist ebenfalls noch nicht Zielführend. Die ProgressBar füllt sich nur bis zu 1/3.
MfG SnitsuD
Antworten
-
Das Problem liegt nicht an dem QuickSort. (Damit er richtig läuft muss der Counter noch den beiden Schleifen hinzugefügt werden. Die Formel des progressvalues und die Übergabe an den delegate kommt nach den beiden Rekursiv Aufrufen!).
Progressbar wird ungefähr nur bis 70-80% gefüllt
Das eigentliche Probelm, sprich die korrekte Füllung der Progressbar, liegt an dem zu großem Wert des progressvalues.
Wenn der progressvalue z.B. den Wert 20 annimmt, dann hat die Progressbar die Aufgabe Sie bis zum 20ten Value zu füllen. Schafft Sie aber während der Zeit vom Delegate nicht. Die Animation der Progressbar von Windows kommt nicht hinterher (Vorwärtsbewegung: Smooth; Rückwärtsbewegung: Sprung).this->progressBarSelection->Maximum = 101; this->progressBarSelection->Value = 101; this->progressBarSelection->Maximum = 100;
Hat dann letztendlich Abhilfe geschaffen, nutze zum Schluss die Rückwärtsbewegung um die Füllung anzuzeigen
Dann springt er die letzten % zwar aber um das Gesamtergebnis darzustellen reicht es auf jeden Fall aus!
- Als Antwort markiert SnitsuD Donnerstag, 21. Januar 2016 17:08
Alle Antworten
-
Hallo SnitsuD,
Würdest Du die Lösung, die Du gefunden hast, näher beschreiben, damit sie auch künftigen Lesern dieses Threads zur Verfügung steht?
Gruß,
DimitarBitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Das Problem liegt nicht an dem QuickSort. (Damit er richtig läuft muss der Counter noch den beiden Schleifen hinzugefügt werden. Die Formel des progressvalues und die Übergabe an den delegate kommt nach den beiden Rekursiv Aufrufen!).
Progressbar wird ungefähr nur bis 70-80% gefüllt
Das eigentliche Probelm, sprich die korrekte Füllung der Progressbar, liegt an dem zu großem Wert des progressvalues.
Wenn der progressvalue z.B. den Wert 20 annimmt, dann hat die Progressbar die Aufgabe Sie bis zum 20ten Value zu füllen. Schafft Sie aber während der Zeit vom Delegate nicht. Die Animation der Progressbar von Windows kommt nicht hinterher (Vorwärtsbewegung: Smooth; Rückwärtsbewegung: Sprung).this->progressBarSelection->Maximum = 101; this->progressBarSelection->Value = 101; this->progressBarSelection->Maximum = 100;
Hat dann letztendlich Abhilfe geschaffen, nutze zum Schluss die Rückwärtsbewegung um die Füllung anzuzeigen
Dann springt er die letzten % zwar aber um das Gesamtergebnis darzustellen reicht es auf jeden Fall aus!
- Als Antwort markiert SnitsuD Donnerstag, 21. Januar 2016 17:08