C语言qsort详解
qsort是标准函数库自带的快速排序函数
原型:void qsort(void base,size_t num,size_t width,int(compare)(const void*,const void*));
头文件:stdlib.h
返回值:void
参数:
- base -- 指向要排序的数组的第一个元素的指针(待排序的数组)
- nitems -- 由 base 指向的数组中元素的个数。
- size -- 数组中每个元素的大小,以字节为单位。(sizeof(元素的数据类型))
- compar -- 用来比较两个元素的回调函数。(函数指针,用于确定排序的顺序(递增/递减),需要自定义一个比较函数)
回调函数compar: int compar(const void *p1, const void *p2);
compar参数:p1,p2分别指向两个待比较的指针,注意两个形参是const void *型,一般会在compar函数内部强转成实际的类型。
compar返回值 :
如果compar返回值小于0(< 0),那么p1所指向元素会被排在p2所指向元素的左面,即递增;
如果compar返回值大于0(> 0),那么p1所指向元素会被排在p2所指向元素的右面,即递减 ; 如果compar返回值等于0(= 0),那么p1所指向元素与p2所指向元素的顺序不确定,即不变;
例如:
int型数组:
int num[100];
int cmp_int(const void* _a , const void* _b) //参数格式固定
{int* a = (int*)_a; //强制类型转换int* b = (int*)_b;return *a - *b;
}qsort(num,100,sizeof(num[0]),cmp_int);
char型数组:
char word[100];
int cmp_char(const void* _a , const void* _b) //参数格式固定
{char* a = (char*)_a; //强制类型转换char* b = (char*)_b;return *a - *b;
}qsort(word,100,sizeof(word[0]),cmp_char);
二维数组中 数组的第二位进行排序 (a[1],b[1]换成a[0]a[0],即为对第一位进行排序):
int points[100][2]={{5,6},{4,5},{3,4},{4,6}.....}; //int **int cmp_arr(const void* _a, const void* _b) {int *a = *(int**)_a, *b = *(int**)_b;return a[1] < b[1] ? -1 : 1;
}qsort(points, 100, sizeof(int*), cmp_arr);
C语言qsort详解相关推荐
- C语言指针详解(全解)—— 前篇
关于指针的基本概念及相关运算写在了上一篇博客 C语言指针详解(初级)_Seinrich的博客-CSDN博客 本篇博客来详细的解说一下指针,深入探讨指针 一.指针与const const修饰的变量为常变 ...
- python语言编程基础-Python语言入门详解!快速学成Python!
原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...
- python语言入门m-Python语言入门详解!快速学成Python!
今日主题 "Python语言入门详解" 近两年来,Python语言借着数据科学和人工智能的"东风"成为了最流行的编程语言--街头巷尾人们口口相传.同时,Pyth ...
- C语言之详解#ifdef等宏
C语言之详解#ifdef等宏 这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是&qu ...
- c语言 宏教程 pdf,C语言之详解_ifdef等宏.pdf
C 语言之详解 #ifdef 等宏 指令用途 #空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 ...
- 代码检查规则:Python语言案例详解
在之前的文章中代码检查规则:Java语言案例详解学习了Java的检查规则.我们今天将学习<代码检查规则:Python语言案例详解>,内容主要分为两个部分:Python的代码检查规则和Pyt ...
- 代码检查规则:Java语言案例详解
本节课程为<代码检查规则:Java语言案例详解>, 通常情况下Java的代码检查规则可以分为以下十类: 接下来,让我们具体来看看每个分类的内容. 一.源文件规范 该类规范主要从文件名.文件 ...
- Linux_arm_启动_c语言部分详解,[原创]Linux arm 启动 c语言部分详解第四讲
Linux arm启动c语言部分详解第四讲(from setup_per_cpu_areas();) Written by leeming 上面的setup_arch花了我们大量的篇幅,现在我们要继续 ...
- c 语言中 %是什么运算符,C 语言基础----详解C中的运算符
C语言中又有哪些运算符呢? 如下所示: ※ 算术运算符 ※ 赋值运算符 ※ 关系运算符 ※ 逻辑运算符 ※ 三目运算符 C语言基本算术运算符如下表: 除法运算中注意: 如果相除的两个数都是整数的话,则 ...
最新文章
- 【讨论贴】关于父实子虚的疑问???
- spring的view
- 安卓平板排行榜_shopee虾皮台湾安卓市场, shopee虾皮直播下载
- 多样人群,多面生活——观星盘八大策略人群洞察
- Java高并发编程详解系列-线程通信
- 2.基于梯度的攻击——FGSM
- C语言程序设计:图书管理系统(超详细有登录系统,附代码和实验报告)
- 对称加密算法之Java SM4算法应用 附可用工具类
- Power Query For Excel数据处理利器
- 谷歌五笔输入法电脑版_一种比拼音打字更快的输入法,为何却很少有人用
- 改变不需要时间和地点的条件
- 理解风险偏好risk appetite vs. 风险容忍度risk tolerance
- 【科普】TS文件格式:什么是TS?如何打开,编辑和转换它?
- 计算机的英语怎么拼读,拼音拼读怎么教
- JSP+MYSQL网上作业提交及管理系统
- 工作积累⑨——从丁香医生增长看地推的重要性
- 2023springboot计算机毕业设计选题推荐、springboot计算机毕业设计题目大全
- 北京大学软微学院计算机辅助翻译,北京大学软件与微电子学院计算机辅助翻译CAT考研:招生录取信息、备考信息、专业课考研攻略...
- 【电脑小技巧每日一讲:SQL server 2016日志文件的清理】
- tsc条码标签打印机维修故障有哪些
热门文章
- [示例代码]HTML5接水果游戏
- JavaWeb 新闻系统分页操作
- 学习方向:			Learning direction:
- CDA校区恭祝各位朋友元宵节快乐
- 大厂研发需求流程,没想到这么复杂吧?
- 莫言家人回应陈光标赠送别墅:不食嗟来之食-陈光标-别墅-莫言
- 有问题直接说问题,问什么在不在???
- 关于深度学习中Baseline, Benchmark, SOTA的理解
- 高性能Web应用打造攻略:扩展过程中20个最大的绊脚石
- python中,‘str‘ object is not callable,对象不可调用