在此基础上将比较逻辑改为回调实现
时间: 2024-03-14 17:48:17 浏览: 18
下面是使用函数指针实现快排的C语言代码:
```c
#include<stdio.h>
typedef int (*compare_func_t)(int, int);
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int arr[], int low, int high, compare_func_t compare_func) {
int pivot = arr[low];
while (low < high) {
while (low < high && compare_func(arr[high], pivot) >= 0) high--;
arr[low] = arr[high];
while (low < high && compare_func(arr[low], pivot) < 0) low++;
arr[high] = arr[low];
}
arr[low] = pivot;
return low;
}
void quick_sort(int arr[], int low, int high, compare_func_t compare_func) {
if (low < high) {
int pivot_index = partition(arr, low, high, compare_func);
quick_sort(arr, low, pivot_index - 1, compare_func);
quick_sort(arr, pivot_index + 1, high, compare_func);
}
}
int ascending(int a, int b) {
return a - b;
}
int descending(int a, int b) {
return b - a;
}
int main() {
int arr[] = {7, 6, 5, 4, 3, 2, 1};
int n = sizeof(arr) / sizeof(arr[0]);
quick_sort(arr, 0, n - 1, ascending);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
quick_sort(arr, 0, n - 1, descending);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
这个代码实现了使用函数指针实现快速排序算法。其中,`compare_func_t`是比较函数指针类型,`compare_func`是比较函数,用于指定排序顺序。在快排过程中,我们使用`compare_func`函数来判断两个元素的大小关系。`ascending`和`descending`分别是比较函数的实现,用于升序排序和降序排序。在主函数中,我们先使用升序排序对数组进行排序,然后再使用降序排序对数组进行排序,并输出排序后的结果。
在`partition`函数中,我们使用了与上面相似的方法来进行分区,通过`compare_func`函数指定比较逻辑。在`quick_sort`函数中也类似,我们递归调用自身时传递了`compare_func`函数指针。