C рандомизированной быстрой сортировки (улучшение функции разбиения)

Я студент-информатик (только начал), я работал над написанием из псевдокода рандомизированной сводной версии Quicksort. Я'Я написал и проверил это, и все это прекрасно работает, однако ...

Часть раздела выглядит слишком сложной, поскольку кажется, что я что-то упустил или переосмыслил. Я могу'не понимаю, если этоВсе в порядке, или если я сделал несколько ошибок, которых можно избежать.

Короче говоря: это работает, но как сделать лучше?

Заранее спасибо за помощь

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(ia[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++;
        }
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос