32 lines
1.5 KiB
C++
32 lines
1.5 KiB
C++
#include <iostream>
|
|
#include <vector>
|
|
#include <algorithm>
|
|
using namespace std;
|
|
struct M { string t; int y; double r; };
|
|
struct N { M m; N* n; N(M m) :m(m), n(nullptr) {} };
|
|
class D {
|
|
N* f, * r; public:D() :f(nullptr), r(nullptr) {}
|
|
void i(M m) { N* n = new N(m); if (!f)f = r = n; else { n->n = f; f = n; } }
|
|
void a(M m) { N* n = new N(m); if (!f)f = r = n; else { r->n = n; r = n; } }
|
|
void rf() { if (f) { N* t = f; f = f->n; delete t; if (!f)r = nullptr; } }
|
|
void rr() { if (f) { if (f == r) { delete f; f = r = nullptr; } else { N* t = f; while (t->n != r)t = t->n; delete r; r = t; r->n = nullptr; } } }
|
|
M gf() { return f->m; }
|
|
M gr() { return r->m; }
|
|
};
|
|
void b(vector<M>& m) { int n = m.size(); for (int i = 0; i < n - 1; ++i)for (int j = 0; j < n - i - 1; ++j)if (m[j].r > m[j + 1].r)swap(m[j], m[j + 1]); }
|
|
int p(vector<M>& m, int l, int h) { double p = m[h].r; int i = l - 1; for (int j = l; j <= h - 1; ++j)if (m[j].r < p) { ++i; swap(m[i], m[j]); }swap(m[i + 1], m[h]); return i + 1; }
|
|
void q(vector<M>& m, int l, int h) { if (l < h) { int pi = p(m, l, h); q(m, l, pi - 1); q(m, pi + 1, h); } }
|
|
int main() {
|
|
D d;
|
|
d.i({ "M1",2000,8.5 });
|
|
d.a({ "M2",2005,9.0 });
|
|
d.i({ "M3",2010,7.8 });
|
|
vector<M> m = { {"MA",2002,8.2}, {"MB",2008,7.5}, {"MC",2015,9.1}, {"MD",2018,8.7} };
|
|
b(m);
|
|
for (M& e : m)
|
|
cout << e.t << " " << e.y << " " << e.r << endl;
|
|
q(m, 0, m.size() - 1);
|
|
for (M& e : m)
|
|
cout << e.t << " " << e.y << " " << e.r << endl;
|
|
return 0;
|
|
} |