#include <stdio.h>
#include <stdlib.h>
// 比较函数,用于qsort实现降序排序
int compare(const void *a, const void *b) {
return (*(int *)b - *(int *)a);
}
int main() {
int arr[] = {5, 2, 9, 1, 5, 6};
int n = sizeof(arr) / sizeof(arr[0]);
// 使用qsort进行降序排序
qsort(arr, n, sizeof(int), compare);
// 输出排序后的数组
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
函数指针和回调机制的工作原理
- 函数指针:在C语言中,函数指针是一种指向函数的指针变量。
qsort
函数的原型为void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *))
,其中compar
就是一个函数指针。它指向一个比较函数,该函数用于决定两个元素的顺序。
- 回调机制:
qsort
函数在排序过程中,需要比较数组中的元素。它并不会直接知道如何比较具体类型的元素,而是通过调用传递进来的比较函数(即回调函数)来进行比较。在上述代码中,compare
函数就是回调函数。qsort
函数在需要比较两个元素时,会调用compare
函数,并把指向这两个元素的指针作为参数传递给它。compare
函数根据具体需求(这里是降序排序)比较这两个元素,并返回一个整数值来指示它们的顺序。qsort
函数根据这个返回值来决定如何交换元素,从而实现排序。