使用函数指针和 qsort 进行快速排序

Quicksort using function pointers and qsort

我必须编写一个程序,使用 qsort 和函数指针对整数数组进行排序。

编写一个程序,对包含 n 个整数的数组进行排序。读取 n 和数组的值后 从标准输入中,程序读取一个字符,如果这个字符是'a',那么排序 应该是升序的,如果字符是'd'那么排序应该是降序的,如果 字符是'e'那么程序应该退出执行。

这是我的代码,我一直收到错误:assignment of function 'void qsort(void*, size_t, size_t, int (*)(const void*, const void*))。我可以请一些反馈吗?我是完全错误地接近它还是应该只改变几件事?

#include <ctype.h>
#include <stdlib.h>
void quicksort(int *a, int n, int (*func)(char c))
{
    qsort = (a, n, sizeof(int), func);
    for (int i = 0; i < n; i++)
        printf("%d ", a[i]);
}

int compare(char c)
{
    if (c == 'a')
        return -1;
    if (c == 'd')
        return 1;
    else
        return 0;
}
int main()
{
    int *a, n, i;
    scanf("%d", &n);
    a = (int *)malloc(sizeof(int) * n);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    char c;
    while (1)
    {
        scanf("%c", c);
        if (c == 'e')
            break;
        quicksort(a, n, compare);
    }
    free(a);
    return 0;
}

qsort = (a, n, sizeof(int), func);

应该是

qsort(a, n, sizeof(int), func);

即调用函数,不要试图赋值给它。

此外,您传递给 qsort 的比较函数具有不同的签名,采用两个 void* 参数而不是单个 char.

您的代码执行 re-assignment,而不是函数调用。

void quicksort(int *a, int n, int (*func)(char c))
{
    qsort(a, n, sizeof(int), func);
    for (int i = 0; i < n; i++)
        printf("%d ", a[i]);
}

调用qsort函数,修复func签名获取两个参数。