void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
base:陣列起始位址nmemb:元素個數size:單個元素大小compar:比較函數指標,回傳負值/0/正值決定順序#include <stdlib.h>
#include <stdio.h>
typedef struct {
unsigned long id;
int score;
} Record;
int cmp_id(const void *a, const void *b) {
Record *p1 = (Record *)a;
Record *p2 = (Record *)b;
return (p1->id > p2->id) - (p1->id < p2->id); // 避免溢位
}
int cmp_score(const void *a, const void *b) {
Record *p1 = (Record *)a;
Record *p2 = (Record *)b;
return (p1->score > p2->score) - (p1->score < p2->score);
}
int main() {
Record arr[] = {{3,99},{5,87},{4,56},{2,100},{1,17}};
int n = sizeof(arr)/sizeof(arr[0]);
qsort(arr, n, sizeof(Record), cmp_id);
printf("按 ID 排序:\n");
for (int i=0;i
比較函數指標決定排序依據。傳入不同的比較函數(cmp_id 或 cmp_score),qsort 內部的兩兩比較邏輯就會改變,從而實現按不同欄位排序。這是「策略模式」在 C 語言中的經典體現。