C randomisierte pivot-quicksort (Verbesserung der Funktion partition)

Ich bin ein informatik-student (gerade begonnen) war ich auf das schreiben von pseudocode eine pivot-randomisierte version von Quicksort. Habe ich schon geschrieben und getestet und es funktioniert alles perfekt aber...

Die partition Teil sieht ein bisschen zu kompliziert, wie es sich anfühlt, habe ich etwas verpasst oder overthought. Ich kann nicht verstehen, wenn es ok ist, oder wenn ich machte einige vermeidbare Fehler.

Also lange Rede, kurzer Sinn: es funktioniert, aber wie man es besser machen?

Vielen Dank im Voraus für alle die helfen

void partition(int a[],int start,int end)
{
    srand (time(NULL));
    int pivotpos = 3;   //start + rand() % (end-start);
    int i = start;    //index 1
    int j = end;      //index 2
    int flag = 1;
    int pivot = a[pivotpos];   //sets the pivot's value
    while(i<j && flag)      //main loop
    {
        flag = 0;
        while (a[i]<pivot)
        {
            i++;
        }
        while (a[j]>pivot)
        {
            j--;
        }
        if(a[i]>a[j]) //swap && sets new pivot, and restores the flag
        {
            swap(&a[i],&a[j]);
            if(pivotpos == i)
                pivotpos = j;
            else if(pivotpos == j)
                pivotpos = i;
            flag++;
        }
        else if(a[i] == a[j])       //avoids getting suck on a mirror of values (fx pivot on pos 3 of : 1-0-0-1-1)
        {
            if(pivotpos == i) 
                j--;
            else if(pivotpos == j)
                i++;
            else
            {
                i++;
                j--;
            }
            flag++;
        }
    }
}
Wo ist der code, der für die verwürfelung der pivot?
int pivotpos = 3; (gewählt fairen Würfel)
Siehe p2p.wrox.com/visual-c/66347-quick-sort-c-code.html
Warum dieser und nicht mit dem median einer Stichprobe, wie median-von-drei (ersten, mittleren, letzten; Sie zu Sortieren, wählen Sie neue Mitte als pivot. Hat den Vorteil, dass die natürlichen Wächter für die Partitionierung.) Check-out Bentely und McIllroy "Engineering eine Art Funktion" Software: - Praxis und Erfahrung 23:11 (Nov 1993), S. 1249-1265.

InformationsquelleAutor user3236524 | 2014-01-26

Schreibe einen Kommentar