首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言 qsort 函數完整使用指南與比較函數詳解

     編輯:程式設計綜合問答

qsort 原型

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 語言中的經典體現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved