21xrx.com
2024-11-25 03:18:50 Monday
登录
文章检索 我的文章 写文章
C++ 结构体排序方法
2023-07-11 15:46:41 深夜i     --     --
C++ 结构体 排序方法

C++ 结构体是一种非常有用的数据类型,可以通过组合不同的数据类型来表示一些复杂的实体。在实际应用中,我们经常需要对结构体进行排序,以便更好地管理和利用数据。下面介绍一些 C++ 结构体排序的方法。

1. 冒泡排序

冒泡排序是一种基本的排序算法,它通过反复比较两个相邻元素的值,并交换顺序,以达到排序的目的。下面是使用冒泡排序对结构体进行排序的示例代码:


struct Student

  string name;

  int age;

  int score;

;

bool cmp(Student a, Student b)

{

  if (a.score == b.score)

  {

    if (a.name == b.name)

    

      return a.age < b.age;

    

    else

    

      return a.name < b.name;

    

  }

  else

  

    return a.score > b.score;

  

}

void bubbleSort(Student stu[], int n)

{

  for (int i = 0; i < n - 1; i++)

  {

    for (int j = 0; j < n - i - 1; j++)

    {

      if (cmp(stu[j], stu[j + 1]))

      {

        swap(stu[j], stu[j + 1]);

      }

    }

  }

}

在上面的示例代码中,我们定义了一个名为 Student 的结构体,包含了学生的姓名、年龄和成绩。然后定义了一个比较函数 cmp,用于定义排序的规则。最后,我们使用冒泡排序函数 bubbleSort 对结构体数组进行排序。

2. 快速排序

快速排序是一种常见的排序算法,它通过选择一个基准数,将数组分成两部分,一部分小于基准数,一部分大于基准数。然后递归地对两部分进行排序,最终得到一个有序数组。使用快速排序对结构体进行排序的示例代码如下:


void quickSort(Student stu[], int left, int right)

{

  if (left >= right)

  

    return;

  

  int i = left;

  int j = right;

  Student pivot = stu[left];

  while (i < j)

  {

    while (i < j && cmp(stu[j], pivot))

    

      j--;

    

    if (i < j)

    {

      stu[i++] = stu[j];

    }

    while (i < j && cmp(pivot, stu[i]))

    {

      i++;

    }

    if (i < j)

    {

      stu[j--] = stu[i];

    }

  }

  stu[i] = pivot;

  quickSort(stu, left, i - 1);

  quickSort(stu, i + 1, right);

}

在上面的示例代码中,我们定义了一个快速排序函数 quickSort,使用了递归的方式对结构体数组进行排序。同时,我们也需要使用比较函数 cmp 来定义排序的规则。

结论:

对于结构体的排序,我们可以使用冒泡排序、快速排序等基本排序算法,通过定义比较函数来确定排序规则。同时,我们还可以使用 C++ 标准库中的 sort 函数来快速排序。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复