将额外参数传递给qsort的比较器是一种在C语言中对数组进行排序的方法。qsort是一个标准库函数,用于对数组进行排序。在某些情况下,我们可能需要在比较函数中使用额外的参数。
为了将额外参数传递给qsort的比较器,我们可以使用以下方法:
#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, ¶ms);
for (int i = 0; i< sizeof(arr) / sizeof(arr[0]); i++) {
printf("%d ", arr[i]);
}
return 0;
}
#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函数来支持额外参数。
领取专属 10元无门槛券
手把手带您无忧上云