From e0cf7290b5809a32ca008ff82277c47982d4138e Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Tue, 18 Aug 2015 16:12:01 +0200
Subject: [PATCH] [BL] Added sorting alg. for plain C arrays.

---
 BaseLib/quicksort.h | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/BaseLib/quicksort.h b/BaseLib/quicksort.h
index 82f01ae3857..3cfa15a36d9 100644
--- a/BaseLib/quicksort.h
+++ b/BaseLib/quicksort.h
@@ -75,6 +75,34 @@ void quicksort(std::vector<T1*>& array, std::size_t beg, std::size_t end, std::v
 		perm[i] = data[i].second;
 	}
 }
+
+template <typename T1, typename T2 = std::size_t>
+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::back_inserter(data),
+		[](T1 const& t1, T2 const& t2)
+		{
+			return std::make_pair(t1, t2);
+		});
+
+	// Sort data using first element of the pair.
+	std::sort(data.begin(), data.end(),
+		[](std::pair<T1, T2> const& a, std::pair<T1, T2> const& b)
+		{
+			return (a.first < b.first);
+		});
+
+	// Unzip sorted data.
+	for (std::size_t i = 0; i < data.size(); i++)
+	{
+		array[beg+i] = data[i].first;
+		perm[beg+i] = data[i].second;
+	}
+}
 } // end namespace BaseLib
 
 #endif /* QUICKSORT_H_ */
-- 
GitLab