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

187
21 апреля 2022, 21:10

Как можно сгенерировать случайную позицию для опорного элемента быстрой сортировки не используя функцию 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];
}
Answer 1

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

LAGRE_INTEGER value;
::QueryPerformanceCounter(&value);
const int num = value % 1000;
READ ALSO
Движение игрока SFML

Движение игрока SFML

При движении описанном в таком коде, игрок движется угловато: либо влево, либо вверх, либо вправо, либо вниз, ли по диагонали под углом 45 градусов...

90
За какую ассимптотику работает std::stoi?

За какую ассимптотику работает std::stoi?

В связи с решением одной задачи, в которой я из - за std::stoi получила TL, мне стало интересно - за сколько эта функция работает (в плане ассимптотики)Хотя...

90
Музыка в консоли на С++

Музыка в консоли на С++

Возник вопрос - Как запустить mp3-трек в консоли? Погуглил и все ответы были на тему "установить какие-то библиотеки и они будут на фоне подгружать...

87
Ошибка сегментации СИ

Ошибка сегментации СИ

В Visual Studio всё работает прекрасно, а при компиляции в c99 иногда появляется ошибка сегментации

83