diff --git a/BaseLib/quicksort.h b/BaseLib/quicksort.h index 3cfa15a36d9563a7e48bfb149c483b92228a9e01..f2ec2cd2a434a0699d24ece52c9cf3ad0d9b814e 100644 --- a/BaseLib/quicksort.h +++ b/BaseLib/quicksort.h @@ -25,8 +25,8 @@ void quicksort(std::vector<T1>& array, std::size_t beg, std::size_t end, std::ve { // Zip input arrays. std::vector<std::pair<T1, T2>> data; - data.reserve(array.size()); - std::transform(array.begin(), array.end(), perm.begin(), + data.reserve(end-beg); + std::transform(array.begin()+beg, array.begin()+end, perm.begin()+beg, std::back_inserter(data), [](T1 const& t1, T2 const& t2) { @@ -41,10 +41,10 @@ void quicksort(std::vector<T1>& array, std::size_t beg, std::size_t end, std::ve }); // Unzip sorted data. - for (std::size_t i = 0; i < data.size(); i++) + for (std::size_t i = beg; i < end; i++) { - array[i] = data[i].first; - perm[i] = data[i].second; + array[i] = data[i-beg].first; + perm[i] = data[i-beg].second; } } @@ -53,8 +53,8 @@ void quicksort(std::vector<T1*>& array, std::size_t beg, std::size_t end, std::v { // Zip input arrays. std::vector<std::pair<T1*, T2>> data; - data.reserve(array.size()); - std::transform(array.begin(), array.end(), perm.begin(), + data.reserve(end-beg); + std::transform(array.begin()+beg, array.begin()+(end-beg), perm.begin()+beg, std::back_inserter(data), [](T1* const& t1, T2 const& t2) { @@ -71,8 +71,8 @@ void quicksort(std::vector<T1*>& array, std::size_t beg, std::size_t end, std::v // Unzip sorted data. for (std::size_t i = 0; i < data.size(); i++) { - array[i] = data[i].first; - perm[i] = data[i].second; + array[beg+i] = data[i].first; + perm[beg+i] = data[i].second; } } @@ -82,7 +82,7 @@ void quicksort(T1* & array, std::size_t beg, std::size_t end, T2* & perm) // Zip input arrays. std::vector<std::pair<T1, T2>> data; data.reserve(end-beg); - std::transform(array+beg, array+(end-beg), perm+beg, + std::transform(array+beg, array+end, perm+beg, std::back_inserter(data), [](T1 const& t1, T2 const& t2) {