c++ - 具有枚举方向/类型的冒泡排序结构数组

标签 c++ bubble-sort enumerated-types

我有一个函数排序,被传递给一个结构数组。

结构包含字符串。

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],选择排序 eFirstNameeAscending,并进行相应的排序。

但实际上,我通过了 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/

相关文章:

c++ - 比较中 NULL 和零的区别

c++ - 如何准确找到标记的中心?

C++ 问题冒泡排序二维字符数组

c++冒泡排序与基数排序

c - 在不同级别使用不同的枚举类型

c++ - 在tensorflow c++中是否有将base64字符串解码为张量的函数?

c++ - 如何获取圆的半径值

arrays - 汇编语言中数组的冒泡排序

c++ - 嵌套枚举类型的后缀增量重载