using namespace std;
#include <vector>
#include <algorithm>
#include <cstdio>
#include <time.h>
struct Timer
{
Timer() : start(clock()) {}
double elapsed_ms() { return (double)(clock() - start) * 1000 / CLOCKS_PER_SEC; }
private:
clock_t start;
};
int main(int argc, char ** argv)
{
(void)argc, (void)argv;
for (int size = 100 * 1000 * 1000; size < 100 * 1000 * 1000 + 1; size *= 2)
{
vector<double> source;
source.resize(size);
for (int i = 0; i < size; i++)
{
source[i] = i;
}
const int trials1 = 2;
const int trials2 = 2;
for (int trial1 = 0; trial1 < trials1; trial1++)
{
random_shuffle(source.begin(), source.end());
for (int trial2 = 0; trial2 < trials2; trial2++)
{
auto v = source;
Timer t;
sort(v.begin(), v.end());
printf("qsort(%d): %f ms\n", size, t.elapsed_ms());
}
for (int trial2 = 0; trial2 < trials2; trial2++)
{
auto v = source;
Timer t;
std::make_heap(v.begin(), v.end());
std::sort_heap(v.begin(), v.end());
printf("heapsort(%d): %f ms\n", size, t.elapsed_ms());
}
}
}
return 0;
}
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxjc3RkaW8+CiNpbmNsdWRlIDx0aW1lLmg+CgpzdHJ1Y3QgVGltZXIKewoJVGltZXIoKSA6IHN0YXJ0KGNsb2NrKCkpIHt9Cglkb3VibGUgZWxhcHNlZF9tcygpIHsgcmV0dXJuIChkb3VibGUpKGNsb2NrKCkgLSBzdGFydCkgKiAxMDAwIC8gQ0xPQ0tTX1BFUl9TRUM7IH0KcHJpdmF0ZToKCWNsb2NrX3Qgc3RhcnQ7Cn07CgoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiogYXJndikKewoJKHZvaWQpYXJnYywgKHZvaWQpYXJndjsKCglmb3IgKGludCBzaXplID0gMTAwICogMTAwMCAqIDEwMDA7IHNpemUgPCAxMDAgKiAxMDAwICogMTAwMCArIDE7IHNpemUgKj0gMikKCXsKCQl2ZWN0b3I8ZG91YmxlPiBzb3VyY2U7CgkJc291cmNlLnJlc2l6ZShzaXplKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKCQl7CgkJCXNvdXJjZVtpXSA9IGk7CgkJfQoKCQljb25zdCBpbnQgdHJpYWxzMSA9IDI7CgkJY29uc3QgaW50IHRyaWFsczIgPSAyOwoKCQlmb3IgKGludCB0cmlhbDEgPSAwOyB0cmlhbDEgPCB0cmlhbHMxOyB0cmlhbDErKykKCQl7CgkJCXJhbmRvbV9zaHVmZmxlKHNvdXJjZS5iZWdpbigpLCBzb3VyY2UuZW5kKCkpOwoKCQkJZm9yIChpbnQgdHJpYWwyID0gMDsgdHJpYWwyIDwgdHJpYWxzMjsgdHJpYWwyKyspCgkJCXsKCQkJCWF1dG8gdiA9IHNvdXJjZTsKCQkJCVRpbWVyIHQ7CgkJCQlzb3J0KHYuYmVnaW4oKSwgdi5lbmQoKSk7CgkJCQlwcmludGYoInFzb3J0KCVkKTogJWYgbXNcbiIsIHNpemUsIHQuZWxhcHNlZF9tcygpKTsKCQkJfQoKCQkJZm9yIChpbnQgdHJpYWwyID0gMDsgdHJpYWwyIDwgdHJpYWxzMjsgdHJpYWwyKyspCgkJCXsKCQkJCWF1dG8gdiA9IHNvdXJjZTsKCQkJCVRpbWVyIHQ7CgkJCQlzdGQ6Om1ha2VfaGVhcCh2LmJlZ2luKCksIHYuZW5kKCkpOwoJCQkJc3RkOjpzb3J0X2hlYXAodi5iZWdpbigpLCB2LmVuZCgpKTsKCQkJCXByaW50ZigiaGVhcHNvcnQoJWQpOiAlZiBtc1xuIiwgc2l6ZSwgdC5lbGFwc2VkX21zKCkpOwoJCQl9CgkJfQoJfQoKCXJldHVybiAwOwp9Cg==