标准库函数 qsort ,在 stdlib.h 中声明,其原型为:
void qsort(void *base, int nelem, unsigned int width,
int ( * pfCompare)( const void *, const void *));
使用该函数,可以对任何类型的一维数组排序。该函数参数中,base 是待排序数组的
起始地址,nelem 是待排序数组的元素个数,width 是待排序数组的每个元素的大小(以字
节为单位),最后一个参数 pfCompare 是一个函数指针,它指向一个“比较函数”。
int ( * pfCompare)( const void *, const void *));是一个函数指针,需要用户自己定义一个比较函数。
调用 qsort 库函数,将一个 unsigned int 数组按照个位数从小到
大进行排序。比如 8,23,15 三个数,按个位数从小到大排序,就应该是 23,15,81. #include <stdio.h>
2. #include <stdlib.h>
3. int MyCompare( const void * elem1, const void * elem2 )
4. {
5. unsigned int * p1, * p2;
6. p1 = (unsigned int *) elem1;
7. p2 = (unsigned int *) elem2 ;
8. return (* p1 % 10) - (* p2 % 10 );
9. }
10. #define NUM 5
11. int main()
12. {
13. unsigned int an[NUM] = { 8,123,11,10,4 };
14. qsort( an, NUM, sizeof(unsigned int), MyCompare);
15. for( int i = 0;i < NUM; i ++ )
16. printf("%d ", an[i]);
17. return 0;
18. }
上面程序的输出结果是:
10 11 123 4 8
#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void *a,const void *b){
int *_a=(int *)a;
int *_b=(int *)b;
return (*_a)-(*_b);
}
int main(){
int i;
int (*p)(); //指向函数的指针
p=cmp_int;
int a[5]={5,23,6,1,4};
qsort(a,5,sizeof(int),p);
for(i=0;i<5;i++)
printf("%d ",a[i]);
}