結構體陣列需按多欄位排序(如先按欄位 1 升序,相同則按欄位 2 升序)。
struct Record { int field1; int field2; /* ... */ };
int cmp(const void* a, const void* b) {
const Record* pa = (const Record*)a;
const Record* pb = (const Record*)b;
if (pa->field1 != pb->field1)
return pa->field1 - pb->field1; // 主鍵
return pa->field2 - pb->field2; // 次鍵
}
// 使用
qsort(arr, n, sizeof(Record), cmp);
現代 C++ 推薦 std::sort,型別安全且效能更好:
std::sort(vec.begin(), vec.end(),
[](const Record& a, const Record& b) {
if (a.field1 != b.field1) return a.field1 < b.field1;
return a.field2 < b.field2;
});
(a > b) - (a < b) 或三元運算子。return a.f1 != b.f1 ? a.f1 - b.f1 : (a.f2 != b.f2 ? a.f2 - b.f2 : a.f3 - b.f3);std::greater。C 風格用 qsort + 比較函數指標;C++ 推薦 std::sort + lambda,語法更清晰、型別安全、內聯優化效能更高。