Как можно сгенерировать случайную позицию для опорного элемента быстрой сортировки не используя функцию rand?

Как можно сгенерировать случайную позицию для опорного элемента быстрой сортировки не используя функцию rand? Другие стратегии выбора не подходят из за специфики задания.

#include <iostream>
   
size_t random_position(){
//
}

template <typename T, typename Comparator = std::less<T>>
size_t partition(T* arr, size_t left, size_t right, Comparator cmp = Comparator()){
    std::swap(arr[left + random_position() % (right - left)], arr[right]);
    T piv = arr[right];
    size_t left_iter, right_iter;
    size_t i = left;
    for (; cmp(arr[i], piv); i++);
    left_iter = right_iter = i;
    while(true)
    {
        while(cmp(piv, arr[right_iter]))
            right_iter++;
        if (right_iter == right) {
            std::swap(arr[left_iter], arr[right]);
            return left_iter;
        }
        else{
            std::swap(arr[right_iter], arr[left_iter]);
            right_iter++;
            left_iter++;
        }
    }
}


template <typename T, typename Comparator = std::less<T>>
T QuickSelect(T* arr, size_t k, size_t left, size_t right, Comparator cmp = Comparator()){
    while (left != right){
        size_t piv_pos = partition(arr, left, right, cmp);
        if (piv_pos == k)
            return arr[piv_pos];
        else if (piv_pos > k)
            right = piv_pos - 1;
        else
            left = piv_pos + 1;
    }
    return arr[k];
}

Ответы (1 шт):

Автор решения: Zhihar

ну всегда же есть rand заменители, например:

LAGRE_INTEGER value;
::QueryPerformanceCounter(&value);

const int num = value % 1000;
→ Ссылка