欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

如何使用VC库函数中的快速排序函数

时间:2021-05-27 08:43:19|栏目:C代码|点击:

函数原型:
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("%s\n", szText);
 return 0;
}

上一篇:CFile与CStdioFile的文件读写使用方法详解

栏    目:C代码

下一篇:C语言中的链接编写教程

本文标题:如何使用VC库函数中的快速排序函数

本文地址:http://www.codeinn.net/misctech/129795.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有