无法实现通用排序函数

时间:2018-03-22 01:40:18

标签: c

我正在尝试为我的作业实现通用的排序方法,这就是我所拥有的:

void mySort(int(*condition)(TElement,TElement), DynamicArray *arr)
{
    if (arr == NULL)
        return;
    if (arr->elems == NULL)
        return;
    int i, j;
    for (i = 0; i < arr->length - 1; i++)
        for (j = i; j < arr->length; j++)
            if (condition(arr->elems[i], arr->elems[j]) == 0)
            {
                TElement *aux = arr->elems[i];
                arr->elems[i] = arr->elems[j];
                arr->elems[j] = aux;
            }
}

我的条件结构定义如下:

typedef int(*condition)(Country*, Country*);

//我有一系列“国家”,我需要以各种方式对它们进行排序

我遇到的问题是在哪里编写实际条件方法(可能在我的存储库模块中)以及如何定义它。 我试过这样:

int conditionAsByPop(Country* c1, Country* c2) \\Condition to sort ascending by population
{
    if (c1->population > c2->population)
        return 1;
    return 0;
}

但我不知道怎么称呼它......

void sortAsByPop(CountryRepo* v)
{
    mySort(conditionAsByPop(????), v);
}

谢谢!

1 个答案:

答案 0 :(得分:0)

您将mySort指向函数的指针作为一个参数传递给用户进行比较。在C中,函数名称等效于函数指针,而不是变量。基本上,您必须定义比较函数,例如conditionAsByPop,并使用该函数调用mySort

void sortAsByPop(CountryRepo* v)
{
    mySort(conditionAsByPop, v);
}