// teste de performance de um mergesort "simples" // autor: elias amaral // funciona: não, ahahh (...) #include #include #include #include using namespace std; template vector merge(vector v, vector u) { vector res(u.size()+v.size()); unsigned int i = 0, j = 0; while (i < v.size() && j < u.size()) if (v[i] < u[i]) res[i+j] = v[i++]; else res[i+j] = u[j++]; while (i < v.size()) res[i+j] = v[i++]; while (j < u.size()) res[i+j] = u[j++]; return res; } template vector mergesort(vector v) { unsigned int s = v.size(); if (s <= 1) { return v; } else { vector a(v.begin(), v.begin() + s/2), b(v.begin() + s/2, v.end()); return merge(mergesort(a), mergesort(b)); } } int main(int argc, char* argv[]) { vector res, v; int r; while (cin >> r) v.push_back(r); //variacao (tb nao funciona): /* clock_t t0 = clock(); res = mergesort(v); clock_t t1 = clock(); */ time_t t0 = time(NULL); res = mergesort(v); time_t t1 = time(NULL); if (argc <= 1 || (strcmp(argv[1], "-q") )) { for (unsigned int i = 0; i < res.size(); i++) cout << res[i] << " "; cout << endl; } //problema aqui: ambos os valores sao iguais! t1 - t0 = 0.. cout << t0 << ", " << t1 << endl; }