使用函数指针和 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签名获取两个参数。
我必须编写一个程序,使用 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签名获取两个参数。