Leecode刷题C语言之根据第k场考试的分数排序

执行结果:通过

执行用时和内存消耗如下:

 

 

 

 

int gk = 0;int compare(const void* a, const void* b) {int* ua = *(int**)a;int* ub = *(int**)b;return ub[gk] - ua[gk];
}int** sortTheStudents(int** score, int scoreSize, int* scoreColSize, int k, int* returnSize, int** returnColumnSizes) {gk = k;qsort(score, scoreSize, sizeof(int*), compare);*returnSize = scoreSize;*returnColumnSizes = scoreColSize;return score;
}

解题思路: 

这段代码的主要目的是对一个二维数组(模拟一个学生分数表)按照指定的列(第k列)进行排序。这个二维数组由指针数组构成,其中每个指针指向一个整数数组,代表一个学生的分数。下面是对代码的详细解题思路:

  1. 定义全局变量
    • int gk = 0;:这个全局变量用于存储需要排序的列索引(即第k列)。在compare函数中,它将决定基于哪一列的值进行比较。
  2. 定义比较函数
    • int compare(const void* a, const void* b):这个函数是qsort函数需要的比较函数,用于比较两个元素。在这个场景中,它比较的是两个整数数组的特定列(第k列)的值。
    • int* ua = *(int**)a;int* ub = *(int**)b;:这两行代码将void*类型的参数转换为int**类型,然后解引用为int*,得到指向两个整数数组的指针。
    • return ub[gk] - ua[gk];:根据第k列的值对两个数组进行比较。如果ub[gk]大于ua[gk],则返回正数;如果小于,则返回负数;如果相等,则返回0。这决定了排序的顺序(升序)。
  3. 定义排序函数
    • int** sortTheStudents(int** score, int scoreSize, int* scoreColSize, int k, int* returnSize, int** returnColumnSizes):这个函数接收一个二维数组(学生分数表)、数组的大小、每行的列数、需要排序的列索引k,以及两个输出参数(排序后数组的大小和每行的列数)。
    • gk = k;:将全局变量gk设置为需要排序的列索引k。
    • qsort(score, scoreSize, sizeof(int*), compare);:使用qsort函数对二维数组进行排序。score是待排序的数组,scoreSize是数组的大小,sizeof(int*)是数组中每个元素的大小(即指向整数数组的指针的大小),compare是比较函数。
    • *returnSize = scoreSize;:设置输出参数returnSize为排序后数组的大小(与输入数组相同)。
    • *returnColumnSizes = scoreColSize;:设置输出参数returnColumnSizes为每行的列数,这里直接复用输入参数scoreColSize的地址,因为排序不会改变每行的列数。
    • return score;:返回排序后的二维数组。由于是在原数组上进行排序,所以直接返回输入数组。
  4. 整体流程
    • 调用sortTheStudents函数时,传入学生分数表(二维数组)、表的大小、每行的列数、需要排序的列索引k,以及两个用于接收输出结果的指针。
    • 函数内部通过修改全局变量gk来指定排序的列,然后调用qsort函数进行排序。
    • 排序完成后,函数通过输出参数返回排序后数组的大小和每行的列数,并返回排序后的数组(实际上是原数组,但元素顺序已改变)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/890559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 下SVN新手操作手册

下面来介绍Linux 下 SVN操作方法: 1、SVN的安装 Centos 7 安装Subversion sudo yum -y install subversion Ubuntu 安装Subversion sudo apt-get install subversion 自定义安装,官方地址:https://subversion.apache.org/ 2、SVN的使用…

ArcGIS Pro 3.4新功能3:空间统计新特性,基于森林和增强分类与回归,过滤空间自相关

目录 应用 1:它是相关性还是托布勒第一定律? 应用 2:将空间带入非空间模型 结论 在 ArcGIS Pro 3.4 中,我们在新的空间组件实用程序(Moran 特征向量)工具集中发布了一个新工具 - 从字段过滤空间自相关。…

自定义一个maven骨架 | 最佳实践

自定义一个maven骨架 | 最佳实践 目的:将一个多模块项目的基础结构制作成maven骨架,实现项目的快速构建,风格统一 公司内部会制定自己的规范及包结构。当创建新项目的时候就需要选择骨架,即可生成包结构。 Archetype都为不同类型的…

CTFHUB-web进阶(Bypassdisable_function)

LD_PRELOAD 来到首页发现有一句话直接就可以用蚁剑连接 根目录里有/flag但是不能看;命令也被ban了就需要绕过了 绕过工具在插件市场就可以下载 如果进不去的话 项目地址: #本地仓库;插件存放 antSword\antData\plugins 绕过选择 上传后我们点进去可以看到多了一个绕过的文件;…

workman服务端开发模式-GatewayWorker的使用

一、GatewayWorker介绍 Workerman是一个使用PHP开发的高性能组件,用于构建高性能的异步并发TCP、UDP、Unix Socket、HTTP、Websocket服务。 GatewayWorker是基于Workerman开发的一套TCP长连接的应用框架,实现了单发、群发、广播等接口,内置了…

oracle linux8.10+ oracle 23ai安装

介质准备: 数据库23ai https://edelivery.oracle.com 上述网站下载基础版本,本次未使用。 本次是安装了带补丁的版本: Database Release Update 23.6.0.24.10 GoldImage表示带补丁用于直接安装的软件包 查找888.1对应Primary Note for …

《软件设计的哲学》阅读摘要之设计原则

《软件设计的哲学》(A Philosophy of Software Design)是一本在软件架构与设计领域颇具影响力的书籍,作者 John Ousterhout 在书中分享了诸多深刻且实用的软件设计理念。书中列举的这些设计原则,汇聚了作者丰富的实战经验与深邃的…

uniApp打包H5发布到服务器(docker)

使用docker部署uniApp打包后的H5项目记录,好像和VUE项目打包没什么区别... 用HX打开项目,首先调整manifest.json文件 开始用HX打包 填服务器域名和端口号~ 打包完成后可以看到控制台信息 我们可以在web文件夹下拿到下面打包好的静态文件 用FinalShell或…

项目实战——高并发内存池

一.项目介绍 本项目——高并发内存池,是通过学习并模仿简化 google 的一个开源项目 tcmalloc ,全称 Thread-Caching Malloc,即线程缓存的malloc,模拟实现了一个自己的高并发内存池,用于高效的多线程内存管理&#xff…

Apache Log4j漏洞复现

所用环境 宝塔云服务器 log4j2 是Apache的⼀个java日志框架,我们借助它进行日志相关操作管理,然而在2021年末log4j2爆出了远程代码执行漏洞,属于严重等级的漏洞。 apache log4j通过定义每⼀条日志信息的级别能够更加细致地控制日志⽣成地过…

自动驾驶控制算法-横向误差微分方程LQR前馈控制

本文是学习自动驾驶控制算法第六讲 前馈控制与航向误差以及前两节的学习笔记。 1 横向误差微分方程 以规划的轨迹作为自然坐标系,计算自车在轨迹上的投影点,进而计算误差: 如图所示,横向误差为 d d d,航向误差为 θ…

Apache RocketMQ 5.1.3安装部署文档

官方文档不好使,可以说是一坨… 关键词:Apache RocketMQ 5.0 JDK 17 废话少说,开整。 1.版本 官网地址,版本如下。 https://rocketmq.apache.org/download2.配置文件 2.1namesrv端口 在ROCKETMQ_HOME/conf下 新增namesrv.pro…

Google Cloud Kubernetes Anthos是什么,和Istio有什么关联

Google Cloud Platform (GCP) Kubernetes Anthos 是 Google 推出的一种多云管理平台,基于 Kubernetes,旨在帮助企业在多个云环境中管理和运行容器化应用程序。 https://cloud.google.com/blog/topics/hybrid-cloud/5-frequently-asked-questions-about-…

多摩川编码器协议

多摩川编码器是一种常用的绝对值编码器,其协议基于485硬件接口的标准NRZ协议,通讯波特率为固定的2.5Mbps。以下是多摩川编码器协议的详细说明: 硬件接口 多摩川编码器使用RS485接口进行通信,接口定义如下: 5V供电&…

AI新书推荐:深度学习和大模型原理与实践(清华社)

本书简介 在这个信息爆炸、技术革新日新月异的时代,深度学习作为人工智能领域的重要分支,正引领着新一轮的技术革命。《深度学习和大模型原理与实践》一书,旨在为读者提供深度学习及其大模型技术的全面知识和实践应用的指南。 本书特色在于…

webrtc音频模块(三) windows Core Audio API及声音的播放

在前面介绍了ADM(Audio Device Module),它用于抽象音频设备管理和音频数据采集/播放接口。windows的实现是AudioDeviceWinowCode,它封装了Core Audio APIs实现了对音频设备的操作。 Core Audio APIs windows提供了多种音频操作API,比如最常…

cursor保存更改操作技巧

1. 当我们在agent模式时,要求cursor更改代码时,cursor回答后,就已经更改了代码了,这时候就可以对程序进行编译和测试, 不一定先要点” accept“, 先测试如果没有问题再点“accept”,这样composer就会多一条…

运维工程师面试系统监控与优化自动化与脚本云计算的理解虚拟化技术的优点和缺点

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默, 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把…

2.在 Vue 3 中使用 ECharts 实现动态时间轴效果

在前端开发中,时间轴(Timeline)是一种常见且有效的方式来展示时间相关的数据。在本篇文章中,我们将展示如何在 Vue 3 项目中使用 ECharts 创建一个具有动态时间范围的时间轴,并添加了今日时间的标记以及通过按钮来前进…

Android修行手册 - 移动端几种常用动画方案对比

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…