Skip to content

Instantly share code, notes, and snippets.

Created August 31, 2014 02:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/4df65bae761e5ebd936b to your computer and use it in GitHub Desktop.
Save anonymous/4df65bae761e5ebd936b to your computer and use it in GitHub Desktop.
#include <nonius/main.h++>
#include <random>
#include <ctime>
#include <vector>
#include <iostream>
#include <chrono>
static const int size = 10000000;
static const int chunk_size = size;
NONIUS_BENCHMARK("std::sort unsorted", [](nonius::chronometer meter)
{
std::random_device rd;
std::mt19937 gen(rd());
std::vector<std::vector<int>> v(meter.runs());
for (auto& vr : v)
{
for (int i = 0; i < size; ++i) vr.push_back(i);
}
for (auto& vr : v)
{
std::shuffle(vr.begin(), vr.end(), gen);
}
meter.measure([&](int r)
{
for (int i = 0; i < size; i += chunk_size)
{
std::sort(v[r].begin() + i, v[r].begin() + i + chunk_size);
}
});
})
NONIUS_BENCHMARK("introsort unsorted", [](nonius::chronometer meter)
{
std::random_device rd;
std::mt19937 gen(rd());
std::vector<std::vector<int>> v(meter.runs());
for (auto& vr : v)
{
for (int i = 0; i < size; ++i) vr.push_back(i);
}
for (auto& vr : v)
{
std::shuffle(vr.begin(), vr.end(), gen);
}
meter.measure([&](int r)
{
for (int i = 0; i < size; i += chunk_size)
{
introsort(v[r].begin() + i, v[r].begin() + i + chunk_size);
}
});
})
NONIUS_BENCHMARK("std::sort sorted", [](nonius::chronometer meter)
{
std::vector<std::vector<int>> v(meter.runs());
for (auto& vr : v)
{
for (int i = 0; i < size; ++i) vr.push_back(i);
}
meter.measure([&](int r)
{
for (int i = 0; i < size; i += chunk_size)
{
std::sort(v[r].begin() + i, v[r].begin() + i + chunk_size);
}
});
})
NONIUS_BENCHMARK("introsort sorted", [](nonius::chronometer meter)
{
std::vector<std::vector<int>> v(meter.runs());
for (auto& vr : v)
{
for (int i = 0; i < size; ++i) vr.push_back(i);
}
meter.measure([&](int r)
{
for (int i = 0; i < size; i += chunk_size)
{
introsort(v[r].begin() + i, v[r].begin() + i + chunk_size);
}
});
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment