结构体数组 排序
时间: 2023-07-20 09:10:12 浏览: 107
结构体数组的排序可以使用C++中的标准库算法sort()函数。sort()函数需要传入两个迭代器,表示排序的起始位置和结束位置。对于结构体数组,我们需要自定义排序函数,以告诉sort()函数按照哪个字段进行排序。
例如,我们有一个存储学生信息的结构体数组:
```
struct student {
char name[20];
int age;
float grade;
} class[50];
```
我们可以按照学生的成绩进行排序,代码如下:
```
bool cmp(const student &a, const student &b) {
return a.grade > b.grade;
}
sort(class, class + 50, cmp);
```
在上面的代码中,我们自定义了一个排序函数cmp,它接受两个学生结构体的引用作为参数,并根据成绩字段进行比较。最后,我们将排序结果存储在原数组中。如果需要按照其他字段进行排序,只需要修改cmp函数的比较方式即可。
相关问题
结构体数组排序
可以使用C++中的STL库中的sort函数对结构体数组进行排序,具体步骤如下:
1. 定义结构体类型和结构体数组:
```C++
struct Student {
string name;
int score;
};
Student stu[5] = {{"Tom", 90}, {"Jack", 80}, {"Lily", 95}, {"Bob", 70}, {"Lucy", 85}};
```
2. 定义比较函数:
```C++
bool cmp(Student a, Student b) {
return a.score > b.score; // 按照分数从高到低排序
}
```
3. 使用sort函数进行排序:
```C++
sort(stu, stu + 5, cmp); // 对stu数组进行排序,使用cmp函数作为比较函数
```
4. 输出排序结果:
```C++
for (int i = 0; i < 5; i++) {
cout << stu[i].name << " " << stu[i].score << endl;
}
```
完整代码如下:
```C++
#include <iostream>
#include <algorithm>
using namespace std;
struct Student {
string name;
int score;
};
bool cmp(Student a, Student b) {
return a.score > b.score; // 按照分数从高到低排序
}
int main() {
Student stu[5] = {{"Tom", 90}, {"Jack", 80}, {"Lily", 95}, {"Bob", 70}, {"Lucy", 85}};
sort(stu, stu + 5, cmp); // 对stu数组进行排序,使用cmp函数作为比较函数
for (int i = 0; i < 5; i++) {
cout << stu[i].name << " " << stu[i].score << endl;
}
return 0;
}
```
输出结果为:
```
Lily 95
Tom 90
Lucy 85
Jack 80
Bob 70
```
c语言结构体数组排序
你可以使用冒泡排序或快速排序来对结构体数组进行排序。以下是使用冒泡排序的示例代码:
```c
#include <stdio.h>
#include <string.h>
struct Student {
char name[50];
int score;
};
void bubbleSort(struct Student arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j].score > arr[j+1].score) {
// 交换元素
struct Student temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int main() {
struct Student students[5];
// 输入学生信息
printf("请输入学生姓名和分数:\n");
for (int i = 0; i < 5; i++) {
printf("学生 %d:\n", i+1);
scanf("%s %d", students[i].name, &students[i].score);
}
// 对学生数组进行排序
bubbleSort(students, 5);
// 打印排序后的结果
printf("排序后的结果:\n");
for (int i = 0; i < 5; i++) {
printf("学生 %d: %s %d\n", i+1, students[i].name, students[i].score);
}
return 0;
}
```
这个示例代码定义了一个结构体 `Student`,包含了姓名和分数字段。然后使用冒泡排序对结构体数组 `students` 进行排序。最后打印出排序后的结果。你可以根据需要修改结构体字段和数组大小。
阅读全文