У меня есть функция sort, передается массив структур.
Структуры содержат строки.
struct studentStruct {
string firstName;
string lastName;
int grade;
float GPA;
};
Я также передаю этот массив структур в функцию сортировкикак 2 перечислимых типа.
enum sortField {eFirstName, eLastName, eGrade, eGPA};
enum sortDirection {eAscending, eDescending};
Теперь я должен использовать Bubblesort и функцию compData, поэтому;
void sort( studentStruct s[], enum sortField field, int length, sortDirection d)
{
for(int i = 0; i < length - 1; i++)
{
for(int j = 0; j < length - 1 - i; j++)
{
if(compData(s[j], s[j+1], field, d) == true)
{
swap(s[j], s[j+1]);
cout << "SWAP" << endl;
}
}
}
}
bool compData( studentStruct s1, studentStruct s2, sortField field, sortDirection direction)
{
switch(field)
{
case eFirstName:
{
string f1 = s1.firstName;
string f2 = s2.firstName;
switch(direction)
{
case eAscending:
{
if(f2 < f1)
return true;
}
case eDescending:
{
if(f2 > f1)
return true;
}
}
}
}
}
Итак;Я передаю sort моего массива Structs s[]
, он вызывает compData
, чтобы решить, стоит ли переключать s[j]
и s[j+1]
.compData
просматривает перечисленные значения, чтобы решить, как мы сравниваем s[j]
и s[j+1]
, выбирает сортировку по eFirstName
, eAscending
и сортирует соответственно.
Но на самом деле я передаюsort(s[], eFirstName, 10, eAscending)
и я получаю неправильно отсортированный беспорядок.Для 5 входов M, I, K, O, N,
я получаю N, O, K, I, M;
это просто переворачивание массива.