在C語言中,可以使用標準庫函數qsort
來對結構體進行排序。qsort
函數的原型如下:
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
其中,base
是指向要排序的數組的指針,nmemb
是數組中元素的個數,size
是每個元素的大小,compar
是一個指向比較函數的指針。比較函數的原型如下:
int compare(const void *a, const void *b);
比較函數返回一個負值、零或正值,分別表示第一個參數小于、等于或大于第二個參數。
如果要對結構體數組進行排序,需要編寫一個比較函數,用來比較結構體中的某個字段。假設有如下定義的結構體:
typedef struct {
int id;
char name[50];
} Person;
可以編寫一個比較函數來比較結構體的id字段:
int compare_person(const void *a, const void *b) {
Person *person1 = (Person *)a;
Person *person2 = (Person *)b;
if (person1->id < person2->id) {
return -1;
} else if (person1->id > person2->id) {
return 1;
} else {
return 0;
}
}
然后調用qsort
函數對結構體數組進行排序:
int main() {
Person people[] = {
{3, "Alice"},
{1, "Bob"},
{2, "Charlie"}
};
qsort(people, 3, sizeof(Person), compare_person);
for (int i = 0; i < 3; i++) {
printf("%d: %s\n", people[i].id, people[i].name);
}
return 0;
}
運行上述代碼,將輸出排序后的結構體數組:
1: Bob
2: Charlie
3: Alice