#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
 
struct Student
{
        string name;
        int *homework;
};
 
struct Gradebook
{
        Student *students;
        int numbStudents;
        int numbHomeworks;
};
 
void displayGradebook(Gradebook grdBk);
void selectionSort(Student* array, int n);
bool before(Student s1, Student s2);
 
int main(){
    ifstream fin("namedgrades.txt");
    if (!fin) {
        cout << "Could not open file." << endl;
        exit (1);
    }
 
        string junk;
        Gradebook gb;
 
        fin >> gb.numbStudents >> junk;
        fin >> gb.numbHomeworks >> junk;
 
        gb.students = new Student[gb.numbStudents];
 
        for (int i = 0; i < gb.numbStudents; i++)
        {
               fin >> gb.students[i].name;
               gb.students[i].homework = new int[gb.numbHomeworks];
               
               for (int j = 0; j < gb.numbHomeworks; j++)
               {
                       fin >> gb.students[i].homework[j];
               }
        }
 
        displayGradebook(gb);
 
        selectionSort(gb.students, gb.numbStudents);
 
        cout << endl;
        displayGradebook(gb);
 
    return 0;
}
 
 
void displayGradebook(Gradebook grdBk)
{
        for (int i = 0; i < grdBk.numbStudents; i++)
        {
               cout << grdBk.students[i].name << '\t';
               
               for (int j = 0; j < grdBk.numbHomeworks; j++)
               {
                       cout << grdBk.students[i].homework[j] << ' ';
               }
               cout << endl;
        }
}
 
void selectionSort(Student* array, int n)
{
        int imax = 0, i;
        for (int size = n; size > 1; size--)
        {
               for (i = 1; i < size; i++)
                       if (before(array[imax], array[i]))
                               imax = i;
               Student temp = array[imax];
               array[imax] = array[size-1];
               array[size-1] = temp;
               imax = 0;
        }
}
 
 
bool before(Student s1, Student s2)
{
    return s1.homework[4] < s2.homework[4]; 
}
 
 

syntax highlighted by Code2HTML, v. 0.9.1