Quicksort < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
|
Aufgabe | Bauen sie den gegebenen Quicksort-Algorithmus zu einem randomisierten Quicksort-Alogrithmus der auf gleichverteilten randomisierten Pivotelement basiert. |
Hi Leute!
Ich hab hier einem Quicksort-Algorithmus, den ich nun zum gefragten randomisierten Quicksort-Alogrithmus umbauen muss. Hier der Code:
1: |
| 2: | void swap(int &a, int &b)
| 3: | {
| 4: | int h = b;
| 5: | b = a;
| 6: | a = h;
| 7: | }
| 8: |
| 9: |
| 10: |
| 11: | void PreparePartition(int a[], int f, int l, int &p)
| 12: | {
| 13: | //Pivot-Element
| 14: | //f = f + rand() % (l-f+1);
| 15: | //int f = rand() % 9;
| 16: | int pivot = a[f];
| 17: | //int pivot = a[f];
| 18: | p = f-1;
| 19: |
| 20: | for(int i = f; i <= l; i++)
| 21: | {
| 22: | if(a[i] <= pivot)
| 23: | {
| 24: | p++;
| 25: | swap(a[i], a[p]);
| 26: | }
| 27: | }
| 28: |
| 29: | //Pivot an die richtige Stelle
| 30: | swap(a[f], a[p]);
| 31: | }
| 32: |
| 33: |
| 34: |
| 35: | void Quicksort(int a[], int f, int l)
| 36: | {
| 37: | int part;
| 38: |
| 39: | if(f < l)
| 40: | {
| 41: | PreparePartition(a,f,l,part);
| 42: | Quicksort(a,f,part-1);
| 43: | Quicksort(a,part+1,l);
| 44: | }
| 45: | }
|
In der Funktion PreparePartition seht ihr ganz am Anfang zwei auskommentierte Codefragmente, die ich ausprobiert habe. Leider funktioniert der Sortier-Algo dann nur noch sporadisch. Ist es also noch nicht ganz richtig.
Des Weiteren hab ich versucht, die Funktion Quicksort aus der main schon an der Stelle f mit randomisierten Zufallszahlen aufzurufen; leider auch ohne Erfolg...
Ich hoffe, jemand von euch kann mir helfen! Das wäre sehr nett!
Danke!
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:20 Sa 20.04.2013 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|