Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 通用快速排序_C_Sorting_Qsort - Fatal编程技术网

C 通用快速排序

C 通用快速排序,c,sorting,qsort,C,Sorting,Qsort,下面是C上泛型qsort的代码片段 当在递归中调用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=par

下面是C上泛型qsort的代码片段

当在递归中调用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
):


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

我认为您只需要将比较函数指针传递给分区函数。什么是节点?您是否遇到编译错误?您似乎没有将fcmp anywhere passed(int()(const void,const void*)compnode用作第四个参数。谢谢
genmyqsort(a*size, pivot, size, fcmp);
genmyqsort(a+(pivot+1)*size, n-pivot-1, size, fcmp);