diff --git a/task2/include/quicksort_mt.h b/task2/include/quicksort_mt.h index 506f654..6d57e78 100644 --- a/task2/include/quicksort_mt.h +++ b/task2/include/quicksort_mt.h @@ -20,11 +20,13 @@ public: private: auto parition(std::span &data) -> std::pair, std::span> { - auto pivot = data.begin(); - std::advance(pivot, std::distance(data.begin(), data.end()) / 2); + std::vector buf(data); - auto lefti = data.begin(); - auto righti = data.end(); + auto pivot = buf.begin(); + std::advance(pivot, std::distance(buf.begin(), buf.end()) / 2); + + auto lefti = buf.begin(); + auto righti = buf.end(); while (1) { for (; cmp(*lefti, *pivot); lefti++); @@ -37,6 +39,7 @@ private: std::swap(lefti, righti); } + std::move(buf.begin(), buf.end(), data.begin()); return {std::span(data.begin(), lefti), std::span(lefti, data.end())}; }