前言:

在一些编程题中经常需要你按照某个指标按照从小到大或从大到小输出一些数据,这时你可以自己写一个排序函数进行排序,但是其实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;

}

c语言qsort函数简介,C语言排序函数—qsort函数相关推荐

  1. C语言 memcpy 和 strcpy 函数区别 - C语言零基础入门教程

    目录 一.memcpy 函数/strcpy 函数简介 二.memcpy 函数/strcpy 函数实战 1.strcpy 函数属于字符串拷贝 2.memcpy 函数属于内存拷贝 三.猜你喜欢 零基础 C ...

  2. windows c语言 pipe,pipe 函数 (C语言)

    pipe我们用中文叫做管道. 以下讲解均是基于Linux为环境: 函数简介 所需头文件 #include 函数原型 int pipe(int fd[2]) 函数传入值 fd[2]:管道的两个文件描述符 ...

  3. C语言新手入门|初始C语言

    目录 简介 前期准备 1.代码托管(Githhub/Gitee) 2.电子笔记 3.编译软件 第一个C语言程序 数据类型 简介 C语言是一门通用的计算机编程语言,广泛应用于底层开发.C语言能以简易的方 ...

  4. c语言stand(time(0)),C语言复习0_准备工作

    前言: 第一次接触C语言是大一下学期的时候,2013年上半年,那个时候的开发工具还是VS C++,今天了解了一下,常用的开发工具变成了CodeBlocks.决定趁着毕业到入职这一段CD时间,拾起这门语 ...

  5. MySQL TIMESTAMPDIFF函数简介

    MySQL TIMESTAMPDIFF函数简介 TIMESTAMPDIFF(unit,begin,end); TIMESTAMPDIFF函数返回begin-end的结果,其中begin和end是DAT ...

  6. C语言 qsort的用法 模拟EXCEL排序

    C语言 qsort的用法 模拟EXCEL排序 题目 Excel可以对一组记录按任意指定列排序.现请编写程序实现类似的功能. 输入 输入的第一行包含两个正整数N(<= 10^5)和C,其中N是记录 ...

  7. Python的web框架Django(1):HTTP、简介、静态文件配置、路由系统、视图函数、模板语言、ORM、Ajax、分页器、forms、Cookie、Session、中间件、ModelForm

    1. HTTP协议 1)HTTP请求协议 请求格式 POST(方法) /form/entry(URI) HTTP/1.1(协议版本) HOST:hackr.jp(服务端地址) Connection:k ...

  8. R语言dplyr包排序及序号函数实战(row_number、ntile、min_rank、dense_rank、percent_rank、cume_dist)

    R语言dplyr包排序及序号函数实战(row_number.ntile.min_rank.dense_rank.percent_rank.cume_dist) 目录 R语言dplyr包排序及序号函数实 ...

  9. c++中的fork函数_linux c语言 fork() 和 exec 函数的简介和用法

    linux c语言 fork() 和 exec 函数的简介和用法 假如我们在编写1个c程序时想调用1个shell脚本或者执行1段 bash shell命令, 应该如何实现呢? 其实在<stdli ...

最新文章

  1. UI调试神器 for ios:Reveal的使用与破解
  2. 13 个适合『中级开发者』练手的项目
  3. java中system_《java中System类》 | 学步园
  4. mysql学习day02
  5. JAVA Long String类型之间的转换
  6. cookie 设置有效期 检测cookie
  7. mysql插入datetime默认值0000-00-00时报错
  8. 游戏服务器背包设计与开发
  9. 数据库银行业务基础知识
  10. 关于Vue.js和React.js,听听国外的开发者怎么说?
  11. 45页精华《2022中国建筑行业数字化转型研究报告》出炉(附下载)
  12. Netty里面的Boss和Worker【Server篇】
  13. SS14、SS24、SS34 区别
  14. 第五章 Java字符串总结
  15. [ZT]企业建站常用中英文对照表
  16. 非常经典的节选:施耐庵《鲁提辖拳打镇关西》
  17. 计算机培训感想幼儿园,幼儿园指南培训心得感想
  18. 【程序设计】暴力枚举
  19. 创新工程-涂鸦移动面试总结
  20. 后腰椎间盘突出时期的生活

热门文章

  1. 如何保证网页的字体在各平台都尽量显示为最高质量的黑体?
  2. 2021年安全员-B证考试题库及安全员-B证模拟试题
  3. telerik学习记录-RadButton(上)
  4. matlab 线性回归 参数显著性,基于Matlab的栅格数据一元线性回归及显著性检验(slope趋势分析)...
  5. POI 实现Excel导入数据库
  6. ORM映射框架总结--SQL 语句生成组件
  7. 常见字符对应的ASCII值
  8. 区块链产教融合刻不容缓,高校该如何培养行业人才
  9. android 如何判断去电或来电已经接通
  10. 推荐一款在线API、文档工具ShowDoc实现自动同步数据字典