当前位置: 首页 > article >正文

qsort函数对二维数组的排序Cmp函数理解

在我们解题过程中,很多情况下,排序是必不可少的一环。

对于C语言来说,排序函数qsort就显得非常重要。

本文介绍一维数组、二维数组的qsort排序,其中二维数组的Cmp函数的写法做了详细注释。

qsort函数原型介绍:

/* arr:排序目标
    size: 排序个数
    sizeof(a[0]):排序元素大小
    cmp:排序规则函数
*/
qsort(arr, (size_t)size, sizeof(a[0]), Cmp)

一维数组排序:

注意:如果是字符串,则按照ASCII升序排序。

//从小到大排序
int Cmp(const void *a, const void *b) {
    int tempA = *(int *)a;
    int tempB = *(int *)b;
    return tempA - tempB;
}

int main(){
    int arr[100] = {0};
    qsort(arr, 100, sizeof(arr[0]), Cmp);
    return 0;
}

二维数组排序:

下面主要写了对二维数组的第一维和第二维排序的方法

int Cmp(const void *a, const void *b) {
    // (1)对二维数组的第一维排序
    // 写法1:解引用一次变为一维指针,用数组的值相减
    return (*(int **)a)[0] - (*(int **)b)[0]; 
    // 写法2: 对二级指针解引用两次得到第一列值
    //return *(*(int **)a) - *(*(int **)b);
    
    //(2) 对二维数组的第二维排序
    return (*(int **)a)[1] - (*(int **)b)[1];
}

int main(){
    int arr[4][2] = {
  
  {5, 3}, {3, 1}, {1, 4}, {4, 2}};
    qsort(arr, 4, sizeof(arr[0]), Cmp);
    for(int i = 0; i < 4; i++) {
        printf("%d, %d\n", arr[i][0], arr[i][1]);
    }
    return 0;
}

 


http://www.kler.cn/a/535275.html

相关文章:

  • [高等数学]曲率
  • 4 前端前置技术(上):AJAX技术、Axios技术(前端发送请求)
  • 股指入门:股指期货是什么意思?在哪里可以做股指期货交易?
  • HTML学习笔记(6)
  • 【LeetCode】5. 贪心算法:买卖股票时机
  • 除了网页,还有哪些方式可以访问deepseek r1
  • 【自学笔记】Python的基础知识点总览-持续更新
  • DeepSeek服务器繁忙问题的原因分析与解决方案
  • 【从0开始】使用Flax NNX API 构建简单神经网络并训练
  • Java进阶(ElasticSearch的安装与使用)
  • 25/2/6 <机器人基础> 运动学中各连杆的变换矩阵求法
  • 硬盘接入电脑提示格式化?是什么原因?怎么解决?
  • 基于HAI部署DeepSeekR1的招标文书智能辅助生产开发与应用
  • Vue el-tree 加载过滤出的父节点以及其包含的子节点
  • Flowmix/Docx 多模态文档编辑器春节更新!日期组件 + 一键生成区块链接,效率飞升!...
  • ubuntu安装deepseek
  • 【教学】推送docker仓库
  • 关于使用numpy进行数据解析性能优化的几点认识
  • 反向代理模块你那会
  • Java数据结构与算法之“树”
  • 【BUUCTF逆向题】[MRCTF2020]Transform
  • 用NeuralProphet预测股价:AI金融新利器(附源码)
  • FPGA与ASIC:到底选哪个好?
  • 如何安装LangChain软件包
  • intra-mart实现简易登录页面笔记
  • C语言之函数指针