#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 vec; std::deque 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(num)); deq.push_back(static_cast(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 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; }