当前位置: 编程技术>c/c++/嵌入式
如何使用VC库函数中的快速排序函数
来源: 互联网 发布时间:2014-10-20
本文导语: 函数原型:void qsort(void *base,size_t num,size_t width, int (__cdecl *compare )(const void *, const void *) ); 第一个是数组地址,第二是数组大小,第三个是数组中每个元素的字节数,最后一个是个函数指针,表示如何比较数组中的元素。 头文件...
函数原型:
void qsort(void *base,size_t num,size_t width,
int (__cdecl *compare )(const void *, const void *) );
第一个是数组地址,第二是数组大小,第三个是数组中每个元素的字节数,最后一个是个函数指针,表示如何比较数组中的元素。
头文件 #include
下面分别就int等整数数据,double等浮点数据,结构体和类,按指定方式这四种情况进行讲解。
实例1、对int等整数数据进行排序
代码如下:
int cmp(const void *x, const void *y)
{
return *(int*)x - *(int*)y;
}
qsort(a, MAXN, sizeof(a[0]), cmp);
MAXN为数组大小,下同
实例2、对double等浮点数进行排序
代码如下:
int cmpDouble(const void *x, const void *y)
{
return (*(double*)x > *(double*)y ? 1 : -1);
}
qsort(a, n, sizeof(a[0]), cmpDouble);
实例3、对结构体,类等复杂数据进行排序
如
代码如下:
struct Student
{
char szName[30];
int nAge;
};
先对年龄排序,年龄相同再按姓名排序。
代码如下:
int cmpStudent (const void *x, const void *y)
{ //先作下指针转换,再按要求比较
Student *pNodex = (Student*)x, *pNodey = (Student*)y;
if (pNodex->nAge != pNodey->nAge)
return pNodex->nAge - pNodey->nAge;
else
return strcmp(pNodex->szName, pNodey->szName);
}
qsort(a, n, sizeof(a[0]), cmpStudent);
实例4、按指定方式进行排序。
如对只有大小写字母的字符串"AajkuKdYUBCDwyz"进行排序,要求大写字母在前,小写字母在后。
代码如下:
int cmp1(const void *x, const void *y)
{
char *pcx = (char*)x, *pcy = (char*)y;
bool flag1 = *pcx >= 'A' && *pcx = 'A' && *pcy