C语言中如何用#define数组替换函数调用

8ehkhllq  于 2022-12-22  发布在  其他
关注(0)|答案(2)|浏览(152)

我试图在一个循环中比较不同的排序算法。我在一个字符串数组中有#defined函数调用,但它没有按预期调用函数。问题是什么?
函数调用数组:

const char sorts[][30] = {"bubbleSort(arr, size)", "quickSort(arr, 0, size-1)", "insertionSort(arr, size)",
                      "selectionSort(arr, size)", "mergeSort(arr, 0, size)"};

使用数组调用函数:

for(int i = 0; i < NUMBER_OF_SORTS; ++i) {
    sorts[i];
}

我相信有一个可行的方法,提前感谢帮助。

jxct1oxe

jxct1oxe1#

首先,声明一个类型来表示排序函数(假设排序函数接受整数数组):

typedef void (SORTING_FUNCTION)(int*, size_t);

然后,定义一个指向排序函数的指针数组(在这里,C语言的匈牙利语表示法只建议使用snake case bubble_sort,而对于C++,则建议使用camel case bubbleSort,正如您所做的那样):

SORTING_FUNCTION *sort[] = 
{ 
 bubbleSort,
 quick_sort_wrapper,
 insertionSort,
 selectionSort,
 mergeSort
};

并称之为:

sort[i](array, size);

在这种情况下取i从0到4。
编辑:如果某个排序函数需要额外的参数,例如quickSort,那么您不直接调用quickSort,而是定义一个 Package 函数quick_sort_wrapper,它将具有 SORTING_FUNCTION 签名,并且此函数将调用quickSort,并向其传递除arraysize之外的额外参数。

xlpyo6sf

xlpyo6sf2#

对于初学者来说,这可能是最好的方法,为自己提供了从编译器获得帮助的最佳机会。

switch (i) {
  case 0:
    bubbleSort(arr, size);
    break;
  case 1:
    quickSort(arr, 0, size-1);
    break;
  case 2:
    insertionSort(arr, size);
    break;
  case 3:
    selectionSort(arr, size);
    break;
  case 4:
    mergeSort(arr, 0, size);
    break;
}

相关问题