Files
cpp09/ex02/main.cpp

80 lines
1.9 KiB
C++

#include "PmergeMe.hpp"
bool isPositiveInteger(const std::string &s) {
if (s.empty()) return false;
for (size_t i = 0; i < s.size(); i++) {
if (!isdigit(s[i])) return false;
}
return true;
}
int main(int argc, char **argv)
{
if (argc < 2)
{
std::cerr << "Error" << std::endl;
return 1;
}
std::vector<int> vec;
std::deque<int> deq;
for (int i = 1; i < argc; ++i)
{
std::string arg(argv[i]);
if (!isPositiveInteger(arg))
{
std::cerr << "Error" << std::endl;
return 1;
}
std::istringstream iss(arg);
long num;
iss >> num;
if (num < 0 || num > INT_MAX)
{
std::cerr << "Error" << std::endl;
return 1;
}
vec.push_back(static_cast<int>(num));
deq.push_back(static_cast<int>(num));
}
std::cout << "Before: ";
for (size_t i = 0; i < vec.size() && i < 6; i++)
std::cout << vec[i] << " ";
if (vec.size() > 6)
std::cout << "[...] (" << vec.size() << ")";
std::cout << std::endl;
clock_t startVec = clock();
vec = fordJohnsonSort(vec);
clock_t endVec = clock();
clock_t startDeq = clock();
deq = fordJohnsonSort(deq);
clock_t endDeq = clock();
std::cout << "After: ";
for (size_t i = 0; i < vec.size() && i < 6; i++)
std::cout << vec[i] << " ";
if (vec.size() > 6)
std::cout << "[...] (" << vec.size() << ")";
std::cout << std::endl;
std::vector<int> sortedVec = vec;
std::sort(sortedVec.begin(), sortedVec.end());
if (vec != sortedVec)
throw std::runtime_error("it's not sorted, what-");
double vecTime = (double)(endVec - startVec) / CLOCKS_PER_SEC * 1000000.0;
double deqTime = (double)(endDeq - startDeq) / CLOCKS_PER_SEC * 1000000.0;
std::cout << "Time to process a range of " << vec.size()
<< " elements with std::vector : " << std::fixed << std::setprecision(1) << vecTime << " us" << std::endl;
std::cout << "Time to process a range of " << deq.size()
<< " elements with std::deque : " << std::fixed << std::setprecision(1) << deqTime << " us" << std::endl;
return 0;
}