C言語の構造体の配列をソートするにはどうすればよいですか?
C言語で構造体配列を並び替えるには、標準ライブラリ関数qsortを使用します。以下にサンプルコードを示します。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义一个结构体
struct Person {
char name[20];
int age;
};
// 比较函数,用于指定排序规则
int compare(const void *a, const void *b)
{
// 将void指针转换为结构体指针
const struct Person *personA = (const struct Person *)a;
const struct Person *personB = (const struct Person *)b;
// 按照年龄升序排列
if (personA->age < personB->age) {
return -1;
} else if (personA->age > personB->age) {
return 1;
} else {
return 0;
}
}
int main()
{
struct Person people[] = {
{"Alice", 25},
{"Bob", 20},
{"Charlie", 30}
};
int numPeople = sizeof(people) / sizeof(people[0]);
// 使用qsort函数对结构体数组进行排序
qsort(people, numPeople, sizeof(struct Person), compare);
// 输出排序后的结果
for (int i = 0; i < numPeople; i++) {
printf("Name: %s, Age: %d\n", people[i].name, people[i].age);
}
return 0;
}
上のコードは、qsort関数を使用して、年齢の昇順によってpeople配列をソートします。