关于C语言中快速排序 int (*fcmp)(const void *,const void *) 这个函数的运行原理

int (*fcmp)(const void *,const void *)

我知道这个函数是什么意思.
但是我的问题是.

假设这个 函数 传递 *p 和*q 俩个值地址
int (*fcmp)(const void *p,const void *q)

{
if(*(int *)p>*(int *)q)
return 1;
if(*(int *)p<*(int *)q)
return -1;

retuern 0;
}
在这个函数中 我想知道 指针*p 和 *q 接收的地址 是通过qsort函数的哪些步骤确定之后 所传递下来的..数字对比的时候正常我们写冒泡的话是通过for循环来人为的定义从数组前开始对比还是数组后开始对比,但是在这里 我不知道 他的代码是如何体现的..哪位仁兄能告我一下 需要要对比的数字 qsort函数是如何确定的吗??

这个函数就是个比较函数啊,你在冒泡排序中也要比较大小吗,它的话,因为你比较的东西不一定是整数,你若用个函数指针来预留接口,那么整体的快排几乎不用改代码,只要多写个函数来告诉快排用那个比大小的方法,写出来的快排适用性 更广,至于快排算法,网上很多,你可以看看,总之这个就是来比较大小的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-03
这个函数只是让你在快速排序里确定所使用的规则,这是一个泛化的过程,可能初衷是不只用于数字排序,甚至是字符排序,结构体排序,等等。
第2个回答  2012-10-01
从你的提问来看,我觉得你是想了解快速排序算法的原理。
http://baike.baidu.com/view/115472.htm追问

你没明白我说的是什么意思. 快排原理我知道. 我给你举个例子
void temp(int a,int b) //注意这里
{
printf("%d%d\n",a,b);

}
int main()
{
int a=10,b=20;
temp(a,b); //在注意这里
}
在这里 因为我定义了a和b的值 所以我知道 传到函数中的 a=10 ,b =20
但在int (*fcmp)(const void *p,const void *q) 函数中 我怎么确定qsort是将数组的[0]还是[N-1]开始 我想知道的是这个.

追答

http://baike.baidu.com/view/982231.htm

从qsort函数原型来看,它的入参是一个待排序数组(传入的是数组首地址),还有比较函数。比较函数fcmp是给qsort内部使用的,用来比较两个元素的大小。
至于qsort内部怎么利用你传进去的数组及比较函数,外面看不到。除非在你的比较函数中加入打印信息;或者调试代码,进入qsort查看。

相似回答