c语言qsort函数简介,C语言排序函数—qsort函数

2023-05-16

前言:

在一些编程题中经常需要你按照某个指标按照从小到大或从大到小输出一些数据,这时你可以自己写一个排序函数进行排序,但是其实C语言函数库中就有一个排序函数——qsort函数,使用它可以节省你单独写排序函数所耗费的时间,因而在一些比赛中广泛应用。

qsort函数介绍:

定义于头文件

void qsort( void *ptr, size_t count, size_t size,int (*comp)(const void *, const void *) );

对 ptr 所指向的数组以升序排序。数组包含 count 个长度为 size 字节的元素。用 comp 所指向的函数比较对象。

同 (1) ,除了传递给 comp 附加环境参数 context ,还会在运行时检测下列错误,并调用当前安装的制约处理函数:

count 或 size 大于 RSIZE_MAX

key 、 ptr 或 comp 是空指针(除非 count 为零)

同所有边界检查函数, qsort_s 仅若实现定义了 STDC_LIB_EXT1 ,且用户在包含 stdlib.h 前定义 STDC_WANT_LIB_EXT1 为整数常量 1 才保证可用。

若 comp 指示两元素相等,则它们排序后的结果是未指定的。

参数

ptr - 指向待排序的数组的指针

count - 数组的元素数目

size - 数组每个元素的字节大小

comp - 比较函数。若首个参数小于第二个,则返回负整数值,若首个参数大于第二个,则返回正整数值,若两参数相等,则返回零。

比较函数的签名应等价于如下形式:

int cmp(const void *a, const void *b);

该函数必须不修改传递给它的对象,而且在调用比较相同对象时必须返回一致的结果,无关乎它们在数组中的位置。

context - 附加信息(例如,对照序列),作为第三个参数传递给 comp

返回值

(无)

成功时为零,若检测到运行时制约违规,则为非零

注意

与名称无关,C 和 POSIX 标准都未要求此函数用快速排序实现,也未保证任何复杂度或稳定性。

qsort 的用户通常用全局变量来将附加语境传递给比较函数。

应用举例:

例一·1019 数字黑洞

给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。

例如,我们从6767开始,将得到

7766 - 6677 = 1089

9810 - 0189 = 9621

9621 - 1269 = 8352

8532 - 2358 = 6174

7641 - 1467 = 6174

… …

现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。

输入格式:

输入给出一个 (0,10^​4) 区间内的正整数 N。

输出格式:

如果 N 的 4 位数字全相等,则在一行内输出 N - N = 0000;否则将计算的每一步在一行内输出,直到 6174 作为差出现,输出格式见样例。注意每个数字按 4 位数格式输出。

输入样例 1:

6767

输出样例 1:

7766 - 6677 = 1089

9810 - 0189 = 9621

9621 - 1269 = 8352

8532 - 2358 = 6174

输入样例 2:

2222

输出样例 2:

2222 - 2222 = 0000

思路:

要用不同的数字组成一个最大和最小的数就可以用qsort函数对分离出来的各个数字进行排序组合

AC的代码:

// Date:2020/05/05

// Author:xiezhg5

#include

#include

int cmp(const void *a,const void *b) {

return *(int *)b-*(int *)a;

}

int main(void) {

int str[4];

int max,min;

int right=0;

int num;

scanf("%d",&num);

if(num%1111==0) {

printf("%04d - %04d = 0000",num,num);

return 0;

}

while(right!=6174) {

str[0]=num/1000;

str[1]=num/100%10;

str[2]=num/10%10;

str[3]=num%10;

qsort(str,4,sizeof(str[0]),cmp);

max=str[0]*1000+str[1]*100+str[2]*10+str[3];

min=str[3]*1000+str[2]*100+str[1]*10+str[0];

right=max-min;

printf("%04d - %04d = %04d\n",max,min,right);

num=right;

}

return 0;

}

例二·Sorting students on grades

Description

Rewrite Listing 6.12, GradeExam.cpp, to display the students in increasing order of

the number of correct answers.

Suppose the answers for all students are stored in a two-dimensional array.

Each row

records an student’s ten answers with ten columns.

For example, the following array

stores the answers for 3 students.

0 1 2 3 4 5 6 7 8 9

Student 0 A B A C C D E E A D

Student 1 D B D C C D A E A D

Student 2 E D D A C B E E A D

The key is stored in a one-dimensional array, as follows:

0 1 2 3 4 5 6 7 8 9

Key D B D C C D A E A D

Input

The first line is a positive integer t for the number of test cases.

Each test case contains m+2 lines.

The line 1 contains an integer m (0Then followed m lines, each line contains 10 integers seperated by blanks, for one student’s answers.

And the following line contains 10 keys of correct answers.

Output

For each test case,output each student’s number and the number of correct answers in increasing order of the number of correct answers. Use the format like the sample output.

Sample Input

2

3

A B A C C D E E A D

D B D C C D A E A D

E D D A C B E E A D

D B D C C D A E A D

2

B B E C C D E E A D

A B D C C D E E A D

A B D C C D E E B D

Sample Output

test case 1:

Student 2: 5

Student 0: 7

Student 1: 10

test case 2:

Student 0: 7

Student 1: 9

Problem Source: 程序设计I Chapter6 Arrays

// Date:2020/4/24

// Author:xiezhg5

#include

#include

typedef struct NODE {

int num;

int count;

} NODE; //定义结构体变量NODE

//等下调用排序函数qsort

int cmp(const void *p1, const void *p2) {

NODE *c = (NODE*)p1;

NODE *d = (NODE*)p2;

if(c->count != d->count)

return c->count - d->count; //按成绩降序排列

else

return c->num - d->num; //按序号降序排列

}

int main(void) {

int m;

scanf("%d\n",&m);

for(int k=0; k

int n;

scanf("%d\n",&n);

struct NODE student[101]; //创建studen结构体

char score[n+1][10]; //这是记录成绩的数组

for(int i=0; i

for(int j=0; j<10; j++) {

scanf("%c ",&score[i][j]);

}

}

for(int i=0; i

int grade=0;

for(int j=0; j<10; j++) {

if(score[i][j]==score[n][j]) grade++;

}

student[i].num=i;

student[i].count=grade;

}

//调用qsort函数排序

qsort(student,n,sizeof(NODE),cmp);

printf("test case %d:\n",k+1);

for(int i=0; i < n; i++) {

printf("Student %d: %d\n",student[i].num,student[i].count);

}

}

return 0;

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言qsort函数简介,C语言排序函数—qsort函数 的相关文章

  • NEO4J节点中文名称显示不完整

    NEO4J 是一种图形数据库管理系统 xff0c 它可以存储和管理大量的关系数据 在 NEO4J 中 xff0c 节点是图中的基本单元 xff0c 表示一个实体 如果你在 NEO4J 中的节点中文名称显示不完整 xff0c 可能是因为节点中
  • 怎样设计celery任务在调用 revoke时记录任务状态

    你可以通过在任务函数中手动记录任务状态并在 revoke 时进行更新 可以使用数据库 如 MySQL PostgreSQL 或 MongoDB 存储任务状态信息 xff0c 然后在 revoke 时对其进行更新 下面是一个示例代码 xff1
  • Flutter中,怎么给Scaffold设置背景色

    在Flutter中 xff0c 可以通过在Scaffold的decoration属性中设置BoxDecoration并设置其color属性来设置Scaffold的背景色 例如 xff1a span class hljs built in S
  • 怎么将微信小程序项目转为uniapp项目

    将微信小程序项目转换为uni app项目需要以下几个步骤 安装uni app开发工具 xff1a HBuilderX在HBuilderX中创建一个新的uni app项目将微信小程序的代码复制到uni app项目的相应文件夹中在uni app
  • 介绍matlab的概要和功能介绍

    Matlab Matrix Laboratory 是一个由MathWorks公司开发的商业数学软件 xff0c 它提供了一系列的数学函数和算法 xff0c 可以帮助用户解决复杂的科学计算问题 主要功能包括数值计算 绘图和可视化 编程和应用程
  • 可以就无线定位的研究前沿给出一些介绍吗

    答 xff1a 当前 xff0c 无线定位技术的研究受到了越来越多的关注 它可以提供高精度的位置推断 xff0c 可以用于实时跟踪 边缘计算 导航和室内定位等许多应用场景 近年来 xff0c 基于深度学习的无线定位算法被广泛应用 xff0c
  • 生成十六进制数转二进制数的汇编语言

    以下是一个将十六进制数转换为二进制数的 x86 汇编语言程序的示例 xff1a span class hljs meta section span data span class hljs comment 定义要转换的十六进制数 span
  • 大模型扎堆涌现,AIGC 的价值到底是什么?

    ChatGPT 在 2023 年初爆红之后 xff0c AIGC 引发了各行业的热切关注 xff0c 国内的各类大模型不断推出 近日 xff0c 科大讯飞对外发布了 讯飞星火认知大模型 xff0c 现场不仅实测了文本生成 语言理解 知识问答
  • JAVAer的学习路径

    非常抱歉 我不能用中文回答您的问题 但是 我可以用英文为您介绍学习 Java 的一些建议 如果您是刚刚开始学习 Java 那么建议您从以下几个方面入手 安装 Java 开发环境 JDK 并配置环境变量 这样才能在电脑上开始写 Java 程序
  • 三阶线性自抗扰控制 (LADRC)的原理和推导过程

    三阶线性自抗扰控制 LADRC 是一种线性控制策略 xff0c 它通过计算系统的状态信息来生成控制输入 该策略的目的是通过使用自抗扰 即系统的内部参数 来实现系统的稳定 xff0c 并通过减少噪声的影响来提高系统的性能 在推导LADRC控制
  • 自制aruco识别码

    要自制Aruco识别码 xff0c 你可以使用Aruco库中提供的工具生成自定义识别码 这些工具可以在多种编程语言 如C 43 43 xff0c Python 中使用 xff0c 生成满足你的特定要求的识别码 一旦生成了识别码 xff0c
  • 无人机领域常用的控制算法有哪些

    无人机控制算法常用的有基于模型的控制 Model based Control 基于模糊控制 Fuzzy Control 基于模式识别 Pattern Recognition 神经网络控制 Neural Network Control 基于深
  • Docker创建Mysql容器,并添加root密码验证与更多用户

    使用代码 xff1a 创建Docker的mysql容器 span class token function sudo span span class token function docker span pull mysql span cl
  • 安卓 qemu 运行linux,Qemu运行linux 4.9

    1 git clone最新的Qemu代码到本地 xff1a ubuntu 64 ubuntu X556UB Qemu git clone git git qemu project org qemu git 正克隆到 39 qemu 39 r
  • android os 小米系统,小米全新 OS 自研底层,要挑战最强的 iOS 系统

    小米全新 OS 自研底层 xff0c 要挑战最强的 iOS 系统 2020 04 27 20 29 47 3点赞 1收藏 6评论 4月27日下午消息 xff0c 小米十年梦想之作全新 MIUI 12 操作系统正式亮相 xff0c 这款全新的
  • php函数strrchr,php strrchr函数怎么用

    PHP strrchr函数用于查找指定字符在字符串中的最后一次出现 xff0c 其语法是strrchr string char xff0c 参数string必需 xff0c 是规定要搜索的字符串 xff1b char必需 xff0c 是规定
  • mysql putty,Mysql和Putty – ERROR 1044(42000):拒绝用户访问

    我在命令行级别的mysql相当新 不幸的是 我已经设置的任务意味着我必须使用命令行 我通过PuTTY访问学校服务器 登录没有问题他们输入mysql p 登录正常 但是当我去创建数据库时 我得到了1044错误 我也试过root但也没有运气 l
  • 大模型battle?LLM排行榜出炉,清华竟位列第五!

    CSDN 编者按 自GPT爆火之后 xff0c 当下流行的开源大型语言模型越来越多 xff0c LMSYS 组织 xff08 UC伯克利博士Lianmin Zheng牵头举办 xff09 建立了 Chatbot Arena 基准平台通过匿名
  • html页面引用template组件,在Vue.js中定义组件模板的7种方法

    Vue js 使用了基于 HTML 的模板语法 xff0c 允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据 所有 Vue js 的模板都是合法的 HTML xff0c 所以能被遵循规范的浏览器和 HTML 解析器解析 在Vue
  • 解耦是什么意思通俗点_在美国点餐会用到的“BLT”,你知道是什么意思吗?

    在美国餐厅 xff0c 服务员会如何向后厨传达你点的餐呢 xff1f 来看看这些都是什么吧 xff01 Photo provided to China Daily 1 BLT to go xff01 培根夹莴苣和番茄三明治外卖 原句 xff

随机推荐