【问题标题】:Generic Quicksort通用快速排序
【发布时间】:2013-08-29 09:25:18
【问题描述】:

下面是 C 上泛型 qsort 的代码 sn-ps。

递归调用genmyqsort的第四个参数写什么?

int compnode(node *a, node *b){
   return(strcmp(a->name,b->name));
}

void genmyqsort(void *a, int n, int size, int (*fcmp)(const void*,const void*)){
  int pivot;

  if(n>1){
    pivot=partition(a,n,size);
    genmyqsort(a*size, pivot,size);
    genmyqsort(a+(pivot+1)*size,n-pivot-1,size);
  }
}

在 main 中调用 Qsort。

genmyqsort(b,n,sizeof(node),(int(*)(const void*, const void*)) compnode);

【问题讨论】:

  • 我想你只需要将比较函数指针传递给分区函数。
  • 什么是节点?你得到一个编译错误?您似乎没有在任何地方使用 fcmp
  • 通过 (int()(const void, const void*)) compnode 作为第四个参数。谢谢

标签: c sorting qsort


【解决方案1】:

您传递的比较器与从调用者 (fcmp) 获得的比较器相同:

genmyqsort(a*size, pivot, size, fcmp);
genmyqsort(a+(pivot+1)*size, n-pivot-1, size, fcmp);

这将确保调用树中genmyqsort() 的所有实例将以完全相同的方式比较数组元素。

【讨论】:

    猜你喜欢
    • 2021-03-11
    • 1970-01-01
    • 2020-08-14
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    相关资源
    最近更新 更多