栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言库函数qsort全量总结

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言库函数qsort全量总结

C语言库函数qsort全量总结
  • 1.基础信息
  • 2.应用场景
    • 2.1 一维数组
      • 2.1.1 int型数组
      • 2.1.2 char型数组
      • 2.1.3 double型数组
      • 2.1.3 字符串数组
    • 2.2 二维数组
      • 2.2.1 非malloc分配的数组
      • 2.2.2 malloc分配的数组
    • 2.3 结构体排序
      • 2.3.1 仅按照身高排序
      • 2.3.2 按照身高排序,身高相同的按照体重排序,体重相同的按照编号排序(三级排序)


更新中


1.基础信息

1.1 所在头文件 #include

1.2 函数原型

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*));

参数说明:
base: 需要排序的数组的地址
nitems:数组中的元素数量
size:每一个元素的大小,以字节为单位
comper:用来比较两个元素的函数
1.3 返回值:不返回任何值

2.应用场景 2.1 一维数组

针对int型,char型,double型,char*型数组。参考 https://blog.csdn.net/zhao888789/article/details/79186619

2.1.1 int型数组
int cmpInt(const void*a, const void*b)
{
    int *aa = (int *)a;
    int *bb = (int *)b;
    return *aa - *bb; // 升序
    // return *bb - *aa; // 降序
}
2.1.2 char型数组
int cmpChar(const void*a, const void*b)
{
    char *aa = (char*)a;
    char *bb = (char*)b;
    return *aa - *bb; // 升序
}
2.1.3 double型数组
int cmpDouble(const void*a, const void*b)
{
    double *aa = (double*)a;
    double *bb = (double*)b;
    return *aa > *bb ? 1 : -1; // 注意
}
2.1.3 字符串数组
int cmpStr(const void*a, const void*b)
{
    char *aa = (char*)a;
    char *bb = (char*)b;
    return strcmp(a, b);
}
2.2 二维数组 2.2.1 非malloc分配的数组
// 按照数组某一列排序
int g_col = 0;
int cmpCol(comst void*a, const void*b)
{
    return ((int*)a)[g_col] - ((int*)b)[g_col];
}
2.2.2 malloc分配的数组

参考 https://blog.csdn.net/sinat_35119798/article/details/78547194

// 只参考第一列排序
int cmpCol(comst void*a, const void*b)
{
    int *aa = *(int**)a;
    int *bb = *(int**)b;
    return aa[0] - bb[0]; // 只按照第一列排序
}
// 第一列相等,按照第二列排序
{
    int *aa = *(int**)a;
    int *bb = *(int**)b;
    if (aa[0] == bb[0]) {
        return aa[1] - bb[1];
    } else {
        return aa[0] - bb[0];
    }
}
2.3 结构体排序

首先定义一个结构体

typedef struct {
   int id;  // 编号
   int height; // 身高
   int weight; // 体重
} Massage;
2.3.1 仅按照身高排序
int cmp_Height(const void*a, const void* b)
{
    Massage *aa = (Massage *)a;
    Massage *bb = (Massage*)b;
    return aa->height - bb->height;
}
2.3.2 按照身高排序,身高相同的按照体重排序,体重相同的按照编号排序(三级排序)
int msgCmp(const void*a, const void*b)
{
    Massage *aa = (Massage*)a;
    Massage *bb = (Massage*)b;
    if (aa->height != bb->height) {
        return aa->height - bb->height;
    } else if (aa->height == bb->height && aa->weight != bb->weight) {
        return aa->weight - bb->weight;
    } else if (aa->height == bb->height && aa->weight == bb->weight) {
        return aa->id - bb->id;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934156.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号