Skip to content
Snippets Groups Projects
Commit b24d1faa authored by Tom Fischer's avatar Tom Fischer
Browse files

[BL] Quicksort: Added some asserts to detect mistakes.

parent 68c7af5f
No related branches found
No related tags found
No related merge requests found
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#define QUICKSORT_H_ #define QUICKSORT_H_
#include <algorithm> #include <algorithm>
#include <cassert>
#include <cstddef> #include <cstddef>
#include <iterator> #include <iterator>
#include <vector> #include <vector>
...@@ -20,9 +21,12 @@ ...@@ -20,9 +21,12 @@
namespace BaseLib namespace BaseLib
{ {
/// @pre {end<=array.size() and perm.size()==array.size()}
template <typename T1, typename T2 = std::size_t> template <typename T1, typename T2 = std::size_t>
void quicksort(T1* array, std::size_t beg, std::size_t end, T2* perm) void quicksort(T1* array, std::size_t beg, std::size_t end, T2* perm)
{ {
assert (beg <= end);
// Zip input arrays. // Zip input arrays.
std::vector<std::pair<T1, T2>> data; std::vector<std::pair<T1, T2>> data;
data.reserve(end-beg); data.reserve(end-beg);
...@@ -51,12 +55,20 @@ void quicksort(T1* array, std::size_t beg, std::size_t end, T2* perm) ...@@ -51,12 +55,20 @@ void quicksort(T1* array, std::size_t beg, std::size_t end, T2* perm)
template <typename T1, typename T2 = std::size_t> template <typename T1, typename T2 = std::size_t>
void quicksort(std::vector<T1>& array, std::size_t beg, std::size_t end, std::vector<T2>& perm) void quicksort(std::vector<T1>& array, std::size_t beg, std::size_t end, std::vector<T2>& perm)
{ {
assert (beg<=end);
assert (end<=array.size());
assert (perm.size()==array.size());
quicksort(array.data(), beg, end, perm.data()); quicksort(array.data(), beg, end, perm.data());
} }
template <typename T1, typename T2 = std::size_t> template <typename T1, typename T2 = std::size_t>
void quicksort(std::vector<T1*>& array, std::size_t beg, std::size_t end, std::vector<T2>& perm) void quicksort(std::vector<T1*>& array, std::size_t beg, std::size_t end, std::vector<T2>& perm)
{ {
assert (beg<=end);
assert (end<=array.size());
assert (perm.size()==array.size());
// Zip input arrays. // Zip input arrays.
std::vector<std::pair<T1*, T2>> data; std::vector<std::pair<T1*, T2>> data;
data.reserve(end-beg); data.reserve(end-beg);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment