#ifndef OPP_ALGORITHM_H #define OPP_ALGORITHM_H #include "utility.h" namespace opp { template void sort(T s, T e) { while (s != e) { auto p = s; auto q = s; q++; while (q != e) { if (LT(*q, *p)) { swap(*q, *p); p++; swap(*q, *p); } q++; } sort(s, p); p++; s = p; } } template void sort(T s, T e, LF lt) { while (s != e) { auto p = s; auto q = s; q++; while (q != e) { if (lt(*q, *p)) { swap(*q, *p); p++; swap(*q, *p); } q++; } sort(s, p, lt); p++; s = p; } } template OI copy(II first, II last, OI result) { while (first != last) { *result = *first; ++result; ++first; } return result; } template II find (II first, II last, const T& val) { while (first != last) { if (*first == val) return first; ++first; } return last; } } #endif