From 9c7e3052aacf946fde472b34563de1c74a4d9a42 Mon Sep 17 00:00:00 2001 From: "lisa.pizzo" Date: Wed, 22 Oct 2025 16:01:09 +0200 Subject: [PATCH] Exercise 5, Sheet 1 --- mainEx5.cpp | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 mainEx5.cpp diff --git a/mainEx5.cpp b/mainEx5.cpp new file mode 100644 index 0000000..e38f1eb --- /dev/null +++ b/mainEx5.cpp @@ -0,0 +1,94 @@ +#include +#include +#include +#include // for lower_bound and is_sorted +#include // for random number generation +#include // for timing +using namespace std; + +void insertIntoVector(vector& vec, int n) +{ + minstd_rand generator; + uniform_int_distribution distribution(1, n); + + for (int i = 0; i < n; ++i) + { + int value = distribution(generator); + auto position = lower_bound(vec.begin(), vec.end(), value); + vec.insert(position, value); + } + if (!is_sorted(vec.begin(), vec.end())) + cout << "Warning: Vector is not sorted!\n"; +} + +void insertIntoList(list& lst, int n) +{ + minstd_rand generator; + uniform_int_distribution distribution(1, n); + for (int i = 0; i < n; ++i) + { + int value = distribution(generator); + auto position = find_if(lst.begin(), lst.end(), + [value](int x){ return x >= value; }); + lst.insert(position, value); + } + vector tmp(lst.begin(), lst.end()); + if (!is_sorted(tmp.begin(), tmp.end())) + cout << "Warning: List is not sorted!\n"; +} + +double measureVector(int n) +{ + vector vec(n); + for (int i = 0; i < n; ++i) + vec[i] = i + 1; + + auto start = chrono::high_resolution_clock::now(); + insertIntoVector(vec, n); + auto end = chrono::high_resolution_clock::now(); + chrono::duration elapsed = end - start; + + cout << "Vector final size: " << vec.size() + << ", is_sorted: " << boolalpha + << is_sorted(vec.begin(), vec.end()) << endl; + + return elapsed.count(); +} + +double measureList(int n) +{ + list lst; + for (int i = 1; i <= n; ++i) + lst.push_back(i); + + auto start = chrono::high_resolution_clock::now(); + insertIntoList(lst, n); + auto end = chrono::high_resolution_clock::now(); + chrono::duration elapsed = end - start; + + vector tmp(lst.begin(), lst.end()); + cout << "List final size: " << lst.size() + << ", is_sorted: " << boolalpha + << is_sorted(tmp.begin(), tmp.end()) << endl; + + return elapsed.count(); +} + +int main() +{ + int testSizes[] = {1000, 5000, 10000}; + + for (int i = 0; i < 3; ++i) + { + int n = testSizes[i]; + cout << "--- n = " << n << " ---" << endl; + + double timeVec = measureVector(n); + double timeList = measureList(n); + + cout << "Vector time: " << timeVec << " seconds" << endl; + cout << "List time: " << timeList << " seconds" << endl; + cout << endl; + } + return 0; +}