C 通用快速排序
下面是C上泛型qsort的代码片段 当在递归中调用genmyqsort时,我应该在第四个参数中写什么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
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);