C randomized pivot quicksort (poprawa funkcji partycji)

Jestem studentem informatyki (dopiero co zacząłem), pracowałem nad pisaniem z pseudokodu losowej wersji przestawnej Quicksort. Napisałem go i przetestowałem, ale wszystko działa idealnie ...

Część partycji wygląda na trochę zbyt skomplikowaną, ponieważ wydaje mi się, że coś przeoczyłem lub ją przejąłem. Nie rozumiem, czy jest ok, czy popełniłem kilka możliwych do uniknięcia błędów.

Krótka historia: działa, ale jak zrobić lepiej?

Z góry dziękuję za całą pomoc

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++;
        }
    }
}

questionAnswers(2)

yourAnswerToTheQuestion