C语言中qsort函数的用法实例详解
快速排序是一种用的最多的排序算法,在C语言的标准库中也有快速排序的函数,下面说一下详细用法。
qsort函数包含在<stdlib.h>中
qsort函数声明如下:
1
|
void qsort ( void * base, size_t nmemb, size_t size , int (*compar)( const void *, const void *));
|
参数说明:
base,要排序的数组
nmemb,数组中元素的数目
size,每个数组元素占用的内存空间,可使用sizeof函数获得
compar,指向函数的指针也即函数指针。这个函数用来比较两个数组元素,第一个参数大于,等于,小于第二个参数时,分别显示正值,零,负值。
下面看几个例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
void main( void )
{
int i;
int a[10]={0,1,2,3,4,5,6,7,8,9};
char b[10]={ 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' };
double c[10]={0.1,0.2,0.9,0.5,0.3,0.6,0.7,0.8,1.1,1.2};
int cmp1( const void * a, const void * b)
{
return (*( int *)a-*( int *)b); //a>b 返回正值
}
int cmp2( const void * a, const void *b)
{
return (*( char *)a-*( char *)b);
}
int cmp3( const void * a, const void * b)
{
if ( fabs (*( double *)a-*( double *)b)<1* exp (-20))
return 0;
else
return (((*( double *)a-*( double *)b)>0)?1:-1);
}
qsort (a,10, sizeof ( int ),&cmp1); //对于函数指针(指向函数的指针),直接传入函数名和函数名进行&
//运算都是可以的,因为在调用函数时也是取的函数的地址
qsort (b,10, sizeof ( char ),cmp2);
qsort (c,10, sizeof ( double ),cmp3);
for (i=0;i<10;i++)
printf ( "%d " ,a[i]);
for (i=0;i<10;i++)
printf ( "%c " ,b[i]);
for (i=0;i<10;i++)
printf ( "%lf " ,c[i]);
}
|
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
原文链接:http://blog.csdn.net/zhaozicang/article/details/24174965