手机
当前位置:查字典教程网 >编程开发 >C语言 >如何使用VC库函数中的快速排序函数
如何使用VC库函数中的快速排序函数
摘要:函数原型:voidqsort(void*base,size_tnum,size_twidth,int(__cdecl*compare)(co...

函数原型:

void qsort(void *base,size_t num,size_t width,

int (__cdecl *compare )(const void *, const void *) );

第一个是数组地址,第二是数组大小,第三个是数组中每个元素的字节数,最后一个是个函数指针,表示如何比较数组中的元素。

头文件 #include <stdlib.h>

下面分别就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 <= 'Z';

bool flag2 = *pcy >= 'A' && *pcy <= 'Z';

if(flag1 == flag2) //如果都为大写字母或都为小写字母

return *pcx - *pcy;

else //否则,谁为大写字母,谁的权值小。

return flag1 ? -1 : 1;

}

int main()

{

char szText[] = "AajkuKdYUBCDwyz";

qsort(szText, strlen(szText), sizeof(szText[0]), cmp1);

printf("%sn", szText);

return 0;

}

【如何使用VC库函数中的快速排序函数】相关文章:

浅谈内联函数与宏定义的区别详解

如何在C语言的宏中使用类型关键字

如何用C语言生成简单格式的xml

获取一个文件行数的方法

指向类成员函数的指针其实并非指针

函数指针与指针函数的学习总结

C语言函数的递归和调用实例分析

c++实现strcat字符串连接库函数的方法详解

如何求连续几个数之和的最大值

解析如何用指针实现整型数据的加法

精品推荐
分类导航