我有一个函数排序,被传递给一个结构数组。
结构包含字符串。
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;
}
}
}
}
}
所以;我对我的 Structs s[]
数组进行排序,它调用 compData
来决定是否切换 s[j]
和 s[j+1]
。 compData
查看枚举值来决定我们如何比较 s[j]
和 s[j+1]
,选择排序 eFirstName
,eAscending
,并进行相应的排序。
但实际上,我通过了 sort(s[], eFirstName, 10, eAscending)
并且排序不正确。对于 M, I, K, O, N,
的 5 个输入,我要退出
N, O, K, I, M;
只是翻转数组。
最佳答案
我在 compData
中为条件语句的 else
部分添加了 return false
并且它按预期工作。
switch(direction)
{
case eAscending:
{
if(f2 < f1)
return true;
else
return false;
}
case eDescending:
{
if(f2 > f1)
return true;
else
return false;
}
}
在线查看demo .
关于c++ - 具有枚举方向/类型的冒泡排序结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52736817/