函数指针实现通用排序
时间: 2023-11-22 10:44:05 浏览: 124
函数指针可以实现通用排序,具体实现方法如下:
1. 定义一个函数指针类型,用于指向排序函数。
2. 编写多个排序函数,每个函数实现一种排序算法。
3. 在排序函数中,通过函数指针参数传入要比较的元素类型和比较函数。
4. 在主函数中,根据需要选择要使用的排序算法,并将对应的函数指针传入排序函数中。
以下是一个示例代码:
```c
#include <stdio.h>
typedef int (*compare_func)(void *, void *);
void bubble_sort(void *arr, int len, int elem_size, compare_func cmp) {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
void *a = arr + j * elem_size;
void *b = arr + (j + 1) * elem_size;
if (cmp(a, b) > 0) {
char tmp[elem_size]; memcpy(tmp, a, elem_size);
memcpy(a, b, elem_size);
memcpy(b, tmp, elem_size);
}
}
}
}
int int_cmp(void *a, void *b) {
int x = *(int *)a;
int y = *(int *)b;
return x - y;
}
int main() {
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6};
int len = sizeof(arr) / sizeof(int);
bubble_sort(arr, len, sizeof(int), int_cmp);
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
阅读全文