#include <list>
#include <functional>
#include <iterator>
#include <iostream>
#include <random>
template <typename TIterator, typename TObject>
void mergeSort(const TIterator& begin, const TIterator& end,
std::function<bool (const TObject& left,
const TObject& right)> criterium)
{
//...
}
bool compare(int a, int b)
{
return a < b;
}
int main(int argc, char** argv) // And now to test the algorithm
{
std::list<int> container;
for (int i = 0; i < 100; ++i)
container.push_back(random() % 20);
std::function<bool(const int&, const int&)> myCompare = compare;
mergeSort(container.begin(), container.end(), myCompare);
for (auto it = container.begin(); it != container.end(); ++it)
std::cout << (*it) << std::endl;
return 0;
}
I2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHJhbmRvbT4KCnRlbXBsYXRlIDx0eXBlbmFtZSBUSXRlcmF0b3IsIHR5cGVuYW1lIFRPYmplY3Q+CnZvaWQgbWVyZ2VTb3J0KGNvbnN0IFRJdGVyYXRvciYgYmVnaW4sIGNvbnN0IFRJdGVyYXRvciYgZW5kLAogICAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKGNvbnN0IFRPYmplY3QmIGxlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVE9iamVjdCYgcmlnaHQpPiBjcml0ZXJpdW0pCnsKICAgIC8vLi4uCn0KCmJvb2wgY29tcGFyZShpbnQgYSwgaW50IGIpCnsKICAgIHJldHVybiBhIDwgYjsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSAgLy8gQW5kIG5vdyB0byB0ZXN0IHRoZSBhbGdvcml0aG0KewogICAgc3RkOjpsaXN0PGludD4gY29udGFpbmVyOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7ICsraSkKICAgICAgICBjb250YWluZXIucHVzaF9iYWNrKHJhbmRvbSgpICUgMjApOwoKICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBpbnQmLCBjb25zdCBpbnQmKT4gbXlDb21wYXJlID0gY29tcGFyZTsKICAgIG1lcmdlU29ydChjb250YWluZXIuYmVnaW4oKSwgY29udGFpbmVyLmVuZCgpLCBteUNvbXBhcmUpOwoKICAgIGZvciAoYXV0byBpdCA9IGNvbnRhaW5lci5iZWdpbigpOyBpdCAhPSBjb250YWluZXIuZW5kKCk7ICsraXQpCiAgICAgICAgc3RkOjpjb3V0IDw8ICgqaXQpIDw8IHN0ZDo6ZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==