C语言排序函数qsort( )
关于c语言排序的问题,以前我都是用冒泡排序或者快速排序,知道这几天,在杭电上面打ACM的时候,才发现又一种排序的函数,就是qsort();
qsort()括号里面有4个参数
第一个参数是将要排序的数组名array;
第二个参数是将要排序的数量n;
第三个参数是每个要排序的参数的大小xizeof(array[o]);
第四个参数是自己写的一个比较函数cmp;
前三个参数还是比较好搞的,但是最后一个参数就比较麻烦了。
一开始见到的题目就是让我排序一个int类型的数组,
那cmp就应该这样写
int cmp(const void*a,const void*b)
{return *(int*)a - *(int*)b;
}
声明cmp的括号里面只能将参数写成const void*;
return部分的话,因为我们比较的是int类型的数组,所以要强制转换格式成为指向int的指针,然后再解引用;
然后a-b就是升序排列,b-a的话就是降序排列;
然后到后面的一题,就需要让我去排一个结构体
typedef struct{int a;int b;
}node;node arrays[1007];
我们要按照a的降序排列这个结构体数组
在qsort()的参数方面有两点需要注意
① 第三个参数要写成sizeof(node);
因为排序的最小单位就是一个结构
② cmp的声明
int cmp(const void*x, const void*y)
{return ((*(node*)y).a) - ((*(node*))x).a);
}
因为我们排的是结构,所以要让参数强制转化格式为指向结构的指针,然后解引用做差;
当然之前我在别的博客上面看到说这个强制转化要在return前完成,但是我真的去写的时候,我的code::blocks总是给我报错,在我想砸电脑的时候,我试了一下参照排列int类型数组那样写cmp
把int换成结构体,结果居然就不报错了,而且完美AC了!!!
ACM题目:1052(排int类型数组);3177(排结构);
from HDU OJ;
C语言排序函数qsort( )相关推荐
- C语言排序函数——qsort
C语言排序函数--qsort: qsort函数原型: void __cdecl qsort(void *_Base,size_t _NumOfElements,size_t _SizeOfElemen ...
- c语言qsort函数简介,C语言排序函数—qsort函数
前言: 在一些编程题中经常需要你按照某个指标按照从小到大或从大到小输出一些数据,这时你可以自己写一个排序函数进行排序,但是其实C语言函数库中就有一个排序函数--qsort函数,使用它可以节省你单独写排 ...
- C语言学习笔记---C库排序函数qsort()
在处理数据的时候,由于排序方法会经常用到,所以C语言的库函数里面自带了快速排序的函数qsort(),对大型数据而言,"快速排序"方法是最有效的排序方法之一.它是把数组不断的分成 ...
- C语言排序函数使用(qsort)
在OJ时, 可能会使用到排序的情形. 如果是使用C语言, <stdlib.h>中已经有相关的排序函数的, 直接用就行. 下面以qsort为例:: #include <stdio.h& ...
- C语言的排序函数qsort()详解
一.qsort()函数的用法及使用说明: 目录 一.qsort()函数的用法及使用说明: 二.使用qsort()函数来求关于各种类型的(降序)排序 1.int类型的数组进行排序 2.char类型的数组 ...
- 排序函数qsort和sort那点事
目录 前言 qsort函数(c语言用) 各参数及其说明 qsort用法实例 sort函数(用于c++) sort模板及其参数说明 sort实例 注意 : 前言 咱们初学编程的可能最先接触的算法就是排序 ...
- C语言-排序-快速排序-qsort<stdlib.h>
想到排序,大多数人第一个想到的都是冒泡排序,今天介绍一种函数,叫快速排序qsort函数,在讲这个函数之前,先将冒泡排序(数字)的代码给大家,如果想排序字符串,请大家使用strcmp函数即可 这是C语言 ...
- c语言排序函数scan,scant(scant是什么函数)
二者表示的程度不同,scare 甚于scant,更为稀缺,你可以看看下面的意思,scant [sk?nt] adj. 不足的:缺乏的:勉强够的 vt. 减少:节省:限制 [ 比较级scanter 最高 ...
- qsort — c语言中自带的排序函数(附带void*、回调函数知识点
因为总是忘记有qsort这个函数,导致遇到需要排序的题的时候,总是要写着类似的代码,所以特此单独把qsort拿出来单独整理一遍,让自己能够熟练掌握,也以免之后忘记了qsort可以拿自己的文章看. 目录 ...
最新文章
- 基于 Rancher 的企业 CI/CD 环境搭建
- Altium Designer Exception ESocketError in module X2.EXE at 001B15CF (10107) on API 'Socket'
- jQuery的同胞遍历
- Golang与C#之switch区别
- 安装深度linux无法引导,安装deepin无法引导,求教!
- mysql单表最大数据量_你的Mysql库真需要Adaptive Hash Index
- linux检测hashicorp,在Ubuntu/CentOS/Debian上安装和配置Hashicorp Vault服务器的方法
- 非常不错的Nodejs工具:http-console
- 组策略对应于注册表位置汇总
- 大龄开发者正在消失?NO,听听这3位50岁程序员怎么说
- dubbo项目引用另一个项目的接口
- spool.exe 出错 无法打印
- NYOJ a problem is easy
- MacOS Monterey 12.6(21G115) OC 0.8.4 / Cl 5149 / PE 三分区原版黑苹果镜像
- 游戏策划学习(一)游戏研发基础
- linux zip和gzip的区别
- PHp猴子偷,这些猴子成精了!偷东西偷得很萌很认真……
- ET篇:做好准备工作并运行master分支的Demo
- OpenWrt 设置IP地址
- Ubuntu18.04中同时安装JDK8、JDK9和JDK11