Как можно сгенерировать случайную позицию для опорного элемента быстрой сортировки не используя функцию 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];
}
ну всегда же есть rand
заменители, например:
LAGRE_INTEGER value;
::QueryPerformanceCounter(&value);
const int num = value % 1000;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
При движении описанном в таком коде, игрок движется угловато: либо влево, либо вверх, либо вправо, либо вниз, ли по диагонали под углом 45 градусов...
В связи с решением одной задачи, в которой я из - за std::stoi получила TL, мне стало интересно - за сколько эта функция работает (в плане ассимптотики)Хотя...
Возник вопрос - Как запустить mp3-трек в консоли? Погуглил и все ответы были на тему "установить какие-то библиотеки и они будут на фоне подгружать...
В Visual Studio всё работает прекрасно, а при компиляции в c99 иногда появляется ошибка сегментации