我是C编程的新手,我正在尝试快速排序一系列记录。我不确定我是否正确地将记录发送到该功能,但我的错误是
错误:从“TaxRecord *”转换为请求的非标量类型“TaxRecord”
错误:不匹配“operator<”在“*(table +((unsigned int)(((unsigned int)left)* 104u)))< pivot”
void qsort(TaxRecord table,int start,int finish);
qsort(theEmployees[i],0,i);
void qsort(TaxRecord table[],int start,int finish) {
int left = start,
right = finish;
TaxRecord pivot = table[((start+finish)/2)];
TaxRecord temp = table;
while (left < right) {
// find left candidate
while (table[left] < pivot)
left++;
// find right candidate
while (table[right] > pivot)
right--;
if (left <= right) {
int temp = table[left];
table[left] = table[right];
table[right] = temp;
left++;
right--;
}
} // while left < right
if (start < right)
qsort(table,start,right);
if (left < finish)
qsort(table,left,finish);
}
答案 0 :(得分:3)
1)您的函数原型与函数声明不匹配。
void qsort(TaxRecord table,int start,int finish);
void qsort(TaxRecord table[],int start,int finish)
2)使用看似单个数组元素而不是数组本身来调用函数。
qsort(theEmployees[i],0,i);
3)您尝试将数组分配给单个TaxRecord
变量。
TaxRecord temp = table;
4)您在交换int
元素时尝试使用TaxRecord
临时值。
int temp = table[left];
table[left] = table[right];
table[right] = temp;
5)错误消息听起来像operator<
类型没有定义TaxRecord
。
我的建议:不要修复代码,只需使用库qsort
或std::sort
,具体取决于它是C还是C ++。
答案 1 :(得分:1)
你宣布了
void qsort(TaxRecord table,int start,int finish);
但已实施
void qsort(TaxRecord table[],int start,int finish);
此外,如果TaxRecord是一个类/结构,那么您必须定义<
运算符以在其上使用它。我还建议你不要一直复制它,而是使用引用或指针。如果你想保持纯C,那么你必须将函数指针传递给比较函数,如下所示:
void qsort(void *data,int start, int finish, int(*compare)(const void *, const void *));