我正在尝试为我的作业实现通用的排序方法,这就是我所拥有的:
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);
}
谢谢!
答案 0 :(得分:0)
您将mySort
指向函数的指针作为一个参数传递给用户进行比较。在C中,函数名称等效于函数指针,而不是变量。基本上,您必须定义比较函数,例如conditionAsByPop
,并使用该函数调用mySort
:
void sortAsByPop(CountryRepo* v)
{
mySort(conditionAsByPop, v);
}