首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将额外参数传递给qsort的比较器

将额外参数传递给qsort的比较器是一种在C语言中对数组进行排序的方法。qsort是一个标准库函数,用于对数组进行排序。在某些情况下,我们可能需要在比较函数中使用额外的参数。

为了将额外参数传递给qsort的比较器,我们可以使用以下方法:

  1. 使用函数指针:
代码语言:c
复制
#include<stdio.h>
#include <stdlib.h>

typedef struct {
    int a;
    int b;
} ExtraParams;

int compare(const void *a, const void *b, void *extra_params) {
    ExtraParams *params = (ExtraParams *)extra_params;
    int diff = ((int *)a)[params->a] - ((int *)b)[params->b];
    return diff;
}

int main() {
    int arr[] = {4, 5, 3, 2, 1};
    ExtraParams params = {0, 1};
    qsort_r(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), compare, &params);
    for (int i = 0; i< sizeof(arr) / sizeof(arr[0]); i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}
  1. 使用全局变量:
代码语言:c
复制
#include<stdio.h>
#include <stdlib.h>

int a = 0;
int b = 1;

int compare(const void *a, const void *b) {
    int diff = ((int *)a)[::a] - ((int *)b)[::b];
    return diff;
}

int main() {
    int arr[] = {4, 5, 3, 2, 1};
    qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), compare);
    for (int i = 0; i< sizeof(arr) / sizeof(arr[0]); i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

在这两种方法中,我们可以使用函数指针或全局变量来传递额外的参数给比较器。函数指针方法更加灵活,因为它允许我们为每个调用qsort指定不同的额外参数。全局变量方法更加简单,但可能会导致代码的可读性和可维护性降低。

需要注意的是,这些方法仅适用于支持额外参数的qsort实现。标准C库中的qsort函数不支持额外参数。在这种情况下,我们可以使用其他库或自己实现一个版本的qsort函数来支持额外参数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券