Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <ctime>
- #include "string.h"
- #include "array.h"
- using namespace std;
- bool Mymore(int a, int b)
- {
- return a > b;
- }
- bool Myless(int a, int b)
- {
- return a < b;
- }
- template <typename T>
- void sort(Array<T>& arr, bool asc)
- {
- bool (*cmp)(T a, T b) = asc ? Myless : Mymore;
- for (int i = 0; i < arr.size() - 1; i++)
- {
- for (int j = i + 1; j < arr.size(); j++)
- {
- if (!cmp(arr[i], arr[j]))
- {
- T temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
- }
- }
- }
- }
- template <typename T>
- Array<T> load_array(const String& filename)
- {
- Array<T> arr;
- ifstream in(filename.str);
- if (!in)
- {
- throw runtime_error("File not found");
- }
- T value;
- while (in >> value)
- {
- arr.append(value);
- }
- return arr;
- }
- template <typename T>
- void print_array(const Array<T>& arr, ostream& out = cout)
- {
- for (int i = 0; i < arr.size(); i++)
- {
- if (i > 0) out << " ";
- out << arr[i];
- }
- out << endl;
- }
- int main(int argc, char* argv[])
- {
- if (argc < 2)
- {
- cerr << "Usage: sortf file [asc|desc] [-o outf] [-v]" << endl;
- return 1;
- }
- String filename = argv[1];
- bool ascending = true;
- bool verbose = false;
- String outputFile;
- for (int i = 2; i < argc; i++)
- {
- if (String(argv[i]) == "desc")
- {
- ascending = false;
- }
- else if (String(argv[i]) == "-o" && i + 1 < argc)
- {
- outputFile = argv[++i];
- }
- else if (String(argv[i]) == "-v")
- {
- verbose = true;
- }
- }
- try
- {
- clock_t startTime = clock();
- Array<int> arr = load_array<int>(filename);
- clock_t loadTime = clock() - startTime;
- if (verbose)
- {
- cout << "Load time: " << static_cast<double>(loadTime) / CLOCKS_PER_SEC << " sec" << endl;
- }
- startTime = clock();
- sort(arr, ascending);
- clock_t sortTime = clock() - startTime;
- if (verbose)
- {
- cout << "Sort time: " << static_cast<double>(sortTime) / CLOCKS_PER_SEC << " sec" << endl;
- cout << "Memory used: " << arr.size() * sizeof(int) / 1024.0 << " KB" << endl;
- }
- if (outputFile.length() > 0)
- {
- ofstream out(outputFile.str);
- if (!out)
- {
- throw runtime_error("Failed to open output file");
- }
- print_array(arr, out);
- }
- else
- {
- print_array(arr);
- }
- }
- catch (const exception& ex)
- {
- cerr << "Error: " << ex.what() << endl;
- return 1;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement