我们可以调用系统函数来实现快速排序,程序如下:
#include<stdio.h>
#include<stdlib.h>
int comp(constvoid *a,const void *b)
{
return *(int *)b-*(int *)a;
}
int main()
{
int i;
int a[10]={1,2,3,6,5,4,7,9,8,0};
qsort(a,10,sizeof(a[0]),comp);
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
我的问题是:qsort()的参数中,comp是比较函数,在这个函数内部是怎么起作用的呢?
首先,
所有排序都是要 经过元素的比较, 然后进行位置交换, 来把元素排成有序的. 所以任何排序的基本思想都包含比较函数了.
再者,
qsort用的是快排变种.
快排基本思路如下:
5, 4, 7, 2, 3, 8
1. 随机找中值,假设抽到7
2. 以7为中值,大体思路:小于7的放左边,大于7的放右边, 把数组划分为两列( 这里就要用比较了) [3,4,5,2],7,[8]
3. 左右两列用同样方法,继续分. 到最后各列都为1,2个元素时, 数组就有序了。
所以比较每个元素进行排序,必须要比较。
void qsort(...)
{
....
if(comp(a[i],a[j]){
swap(...);
}
....
}
应该是这样调用的吧。