Exercise 5, Sheet 1

This commit is contained in:
Lisa Pizzo 2025-10-22 16:01:09 +02:00
commit 9c7e3052aa

94
mainEx5.cpp Normal file
View file

@ -0,0 +1,94 @@
#include <iostream>
#include <vector>
#include <list>
#include <algorithm> // for lower_bound and is_sorted
#include <random> // for random number generation
#include <chrono> // for timing
using namespace std;
void insertIntoVector(vector<int>& vec, int n)
{
minstd_rand generator;
uniform_int_distribution<int> 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<int>& lst, int n)
{
minstd_rand generator;
uniform_int_distribution<int> 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<int> tmp(lst.begin(), lst.end());
if (!is_sorted(tmp.begin(), tmp.end()))
cout << "Warning: List is not sorted!\n";
}
double measureVector(int n)
{
vector<int> 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<double> 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<int> 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<double> elapsed = end - start;
vector<int> 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;
}