源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-10-05 18:22 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:如何使用VC库函数中的快速排序函数
[b]函数原型: [/b]void qsort(void *base,size_t num,size_t width, int (__cdecl *compare )(const void *, const void *) ); 第一个是数组地址,第二是数组大小,第三个是数组中每个元素的字节数,最后一个是个函数指针,表示如何比较数组中的元素。 头文件 #include <stdlib.h> 下面分别就int等整数数据,double等浮点数据,结构体和类,按指定方式这四种情况进行讲解。 [b]实例1、对int等整数数据进行排序 [/b]
[u]复制代码[/u] 代码如下:
int cmp(const void *x, const void *y) {  return *(int*)x - *(int*)y; } qsort(a, MAXN, sizeof(a[0]), cmp);
MAXN为数组大小,下同 [b]实例2、对double等浮点数进行排序 [/b]
[u]复制代码[/u] 代码如下:
int cmpDouble(const void *x, const void *y) {  return (*(double*)x > *(double*)y ? 1 : -1); } qsort(a, n, sizeof(a[0]), cmpDouble);
[b]实例3、对结构体,类等复杂数据进行排序 [/b]如
[u]复制代码[/u] 代码如下:
struct Student {  char szName[30];  int  nAge; };
先对年龄排序,年龄相同再按姓名排序。
[u]复制代码[/u] 代码如下:
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);
[b]实例4、按指定方式进行排序。 [/b]如对只有大小写字母的字符串"AajkuKdYUBCDwyz"进行排序,要求大写字母在前,小写字母在后。
[u]复制代码[/u] 代码如下:
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; }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部