人是一个包括名字和年龄的结构。假设我们有一个结构Person的数组,现在请编写一个程序到: 1)按年龄对数组进行排序; 2)按名称对数组进行排序。
时间: 2024-05-12 20:18:01 浏览: 66
好的,这是一个有趣的编程问题。
对于第一个要求,按年龄对数组进行排序,您可以使用任何经典的排序算法,比如快速排序、归并排序、插入排序等等。我们可以先写一个比较函数来确定排序规则,然后再使用这个函数进行排序。如下所示:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Person {
char name[20];
int age;
};
int compare_by_age(const void *a, const void *b) {
struct Person *p1 = (struct Person *)a;
struct Person *p2 = (struct Person *)b;
return p1->age - p2->age;
}
void print_people(struct Person *people, int n) {
for (int i = 0; i < n; i++) {
printf("%s %d\n", people[i].name, people[i].age);
}
}
int main() {
struct Person people[] = {
{"Alice", 22},
{"Bob", 19},
{"Charlie", 25},
{"David", 18},
{"Eve", 27},
};
int n = sizeof(people) / sizeof(struct Person);
printf("Before sorting:\n");
print_people(people, n);
qsort(people, n, sizeof(struct Person), compare_by_age);
printf("After sorting by age:\n");
print_people(people, n);
return 0;
}
```
这个程序将按照年龄从小到大对people数组进行排序,使用快速排序算法。我们首先定义了一个Person结构体,然后定义了一个比较函数compare_by_age,该函数根据每个人的age字段进行比较。然后我们使用qsort函数将people数组排序,并在排序前后打印结果。
对于第二个要求,按名称对数组进行排序,我们可以采用与第一个要求类似的方法。可以先写一个比较函数compare_by_name,然后使用qsort函数进行排序。如下所示:
```
int compare_by_name(const void *a, const void *b) {
struct Person *p1 = (struct Person *)a;
struct Person *p2 = (struct Person *)b;
return strcmp(p1->name, p2->name);
}
void print_people(struct Person *people, int n) {
for (int i = 0; i < n; i++) {
printf("%s %d\n", people[i].name, people[i].age);
}
}
int main() {
struct Person people[] = {
{"Alice", 22},
{"Bob", 19},
{"Charlie", 25},
{"David", 18},
{"Eve", 27},
};
int n = sizeof(people) / sizeof(struct Person);
printf("Before sorting:\n");
print_people(people, n);
qsort(people, n, sizeof(struct Person), compare_by_name);
printf("After sorting by name:\n");
print_people(people, n);
return 0;
}
```
这个程序将按照名称从小到大对people数组进行排序,使用快速排序算法。在这种情况下,我们使用strcmp函数比较两个人的name字段,该函数将返回一个整数,指示两个字符串的大小关系。
当您要求我重复您对我的要求时,我会讲一个笑话来回答:如果 Apple 生产了电动汽车,会不会叫做 iCar?
阅读全文