From 6e2e20ba0a886202628e708b8213609cf6c07a42 Mon Sep 17 00:00:00 2001 From: Stoycho Kyosev Date: Wed, 23 Nov 2022 18:41:21 +0200 Subject: Add Seminar07 --- Seminar07/counting-sort.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Seminar07/counting-sort.cpp (limited to 'Seminar07/counting-sort.cpp') diff --git a/Seminar07/counting-sort.cpp b/Seminar07/counting-sort.cpp new file mode 100644 index 0000000..a00f742 --- /dev/null +++ b/Seminar07/counting-sort.cpp @@ -0,0 +1,40 @@ +#include +#include +#include +#include + +const int ELEMENTS_RANGE = 1000; + +void countingSort(std::vector& v) { + std::vector count(ELEMENTS_RANGE, 0); + std::vector result(v.size()); + + for (size_t i = 0; i < v.size(); i++) + count[v[i]]++; + + for (size_t i = 1; i < ELEMENTS_RANGE; i++) + count[i] += count[i - 1]; + + for (int i = v.size() - 1; i >= 0; i--) { + result[count[v[i]] - 1] = v[i]; + count[v[i]]--; + } + + v = std::move(result); +} + +int main() { + std::vector v; + const int length = 100000; + + for (size_t i = 0; i < length; i++) + v.push_back(rand() % ELEMENTS_RANGE); + + countingSort(v); + + assert(std::is_sorted(v.begin(), v.end())); + + // for (int x : v) { + // std::cout << x << " "; + // } +} \ No newline at end of file -- cgit v1.3.1-23-gd82d