Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <iomanip>
- using namespace std;
- ifstream in("input.txt");
- ofstream out("output.txt");
- struct Gruppa
- {
- string surname, name, patronymic;
- int BD, m1, m2, m3, m4, m5;
- void Input();
- void Output();
- };
- void Gruppa::Input()
- {
- in >> surname >> name >> patronymic >> BD >> m1 >> m2 >> m3 >> m4 >> m5;
- }
- void Gruppa::Output()
- {
- out << setw(15) << surname << setw(15) << name << setw(15) << patronymic << setw(5) << BD << setw(3) << m1 << setw(3) << m2 << setw(3) << m3 << setw(3) << m4 << setw(3) << m5 << endl;
- }
- void SortIn(Gruppa *a, int n)
- {
- int i, j, l;
- for (i = 0; i < n - 1; i++)
- {
- l = i;
- for (j = i + 1; j < n; j++)
- if (a[j].surname < a[l].surname || (a[j].surname == a[l].surname && a[j].BD > a[l].BD))
- l = j;
- swap(a[i], a[l]);
- }
- }
- void SortShell(Gruppa *a, int n)
- {
- Gruppa temp;
- int i, j, incr = n / 2;
- while (incr > 0)
- {
- for (i = incr; i < n; i++)
- {
- j = i - incr;
- while (j >= 0)
- if (a[j].surname > a[j + incr].surname || (a[j].surname == a[j + incr].surname && a[j].BD < a[j + incr].BD))
- {
- temp = a[j]; a[j] = a[j + incr]; a[j + incr] = temp; j = j - incr;
- }
- else j = -1;
- }
- incr = incr / 2;
- }
- }
- bool comp(Gruppa a, Gruppa b)
- {
- if (a.surname != b.surname)
- return a.surname<b.surname;
- if (a.surname == b.surname && a.BD < b.BD)
- return a.BD > b.BD;
- }
- bool iscomp(Gruppa a, Gruppa b)
- {
- return (a.BD == b.BD && a.surname == b.surname);
- }
- template <typename X>
- void downHeap(X *a, int k, int n)
- {
- Gruppa ne = a[k];
- while (k <= n / 2)
- {
- int child = 2 * k;
- if (child<n && comp(a[child], a[child + 1]))
- child++;
- if (comp(a[child], ne) || iscomp(a[child], ne)) break;
- swap(a[child], a[k]);//a[k]=a[child];
- k = child;
- }
- //a[k]=ne;
- }
- template <typename X>
- void SortHeap(X *a, int n)
- {
- for (int i = n / 2 - 1; i >= 0; i--) downHeap(a, i, n - 1);
- for (int i = n - 1; i>0; i--)
- {
- swap(a[i], a[0]);
- downHeap(a, 0, i - 1);
- }
- }
- int main()
- {
- int i, n = 0;
- Gruppa *a = new Gruppa[100];
- while (in.peek() != EOF)
- {
- a[n].Input();
- n++;
- }
- SortHeap(a, n);
- for (i = 0; i < n; i++)
- a[i].Output();
- in.close();
- out.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement