快速排序记录数组(Struct)

时间:2011-11-22 00:25:32

标签: c++ c

我是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);
}

2 个答案:

答案 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

我的建议:不要修复代码,只需使用库qsortstd::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 *));