diff --git a/BaseLib/quicksort.h b/BaseLib/quicksort.h
index a2dc0da963c22367b639fc89d39af9c42466a191..53b96553593561f2f37f8c3c20fcfd22c230656c 100644
--- a/BaseLib/quicksort.h
+++ b/BaseLib/quicksort.h
@@ -13,6 +13,7 @@
 #define QUICKSORT_H_
 
 #include <algorithm>
+#include <cassert>
 #include <cstddef>
 #include <iterator>
 #include <vector>
@@ -20,9 +21,12 @@
 namespace BaseLib
 {
 
+/// @pre {end<=array.size() and perm.size()==array.size()}
 template <typename T1, typename T2 = std::size_t>
 void quicksort(T1* array, std::size_t beg, std::size_t end, T2* perm)
 {
+	assert (beg <= end);
+
 	// Zip input arrays.
 	std::vector<std::pair<T1, T2>> data;
 	data.reserve(end-beg);
@@ -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>
 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());
 }
 
 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)
 {
+	assert (beg<=end);
+	assert (end<=array.size());
+	assert (perm.size()==array.size());
+
 	// Zip input arrays.
 	std::vector<std::pair<T1*, T2>> data;
 	data.reserve(end-beg);