#include #include #include #include #include #include #include #include #include using namespace std; void merge(int* begin1, int* end1, int* begin2, int* end2, int* merged) { int* curr1 = begin1; int* curr2 = begin2; while(curr1=end2 || (curr1& v) { size_t const n = v.size(); unique_ptr buf { new int[n] }; bool isResultInInput; mergeSortRec(n, v.data(), buf.get(), isResultInInput); if(!isResultInInput) { copy(buf.get(), buf.get()+n, v.data()); } } void generate(vector& v, size_t n) { v.clear(); v.reserve(n); for(size_t i=0 ; i const& v) { for(size_t i=1 ; iv[i]) return false; } return true; } int main(int argc, char** argv) { size_t n = 0; if(argc != 2 || 1!=sscanf(argv[1], "%u", &n)){ fprintf(stderr, "usage: mergesort \n"); return 1; } vector v; generate(v, n); chrono::high_resolution_clock::time_point const beginTime = chrono::high_resolution_clock::now(); mergeSort(v); chrono::high_resolution_clock::time_point const endTime = chrono::high_resolution_clock::now(); cout << (isSorted(v) ? "ok" : "WRONG") << "; time="<< (chrono::duration_cast(endTime-beginTime)).count() <<"ms\n"; }