qsort函数简介

排序方法有很多种:选择排序,冒泡排序,归并排序,快速排序等。 看名字都知道快速排序是目前公认的一种比较好的排序算法。因为他速度很快,所以系统也在库里实现这个算法,便于我们的使用。 这就是qsort函数(全称quicksort)。它是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n)

  • 功能: 使用快速排序例程进行排序
  • 头文件:stdlib.h
  • 用法: void qsort(void* base, size_t num, size_t width, int(__cdecl*compare)(const void*, const void*));
  • 参数:
  1. 待排序数组,排序之后的结果仍放在这个数组中
  2. 数组中待排序元素数量
  3. 各元素的占用空间大小(单位为字节)
  4. 指向函数的指针,用于确定排序的顺序(需要用户自定义一个比较函数)

qsort要求提供一个自己定义的比较函数。比较函数使得qsort通用性更好,有了比较函数qsort可以实现对数组、字符串、结构体等结构进行升序或降序排序。

如比较函数 int cmp(const void *a, const void *b) 中有两个元素作为参数(参数的格式不能变),返回一个int值,比较函数cmp的作用就是给qsort指明元素的大小是怎么比较的。

对int型数组排序

int num[100];
int cmp_int(const void* a, const void* b)  //参数格式固定
{return *(int *)a - *(int *)b;  
}
qsort(num, 100, sizeof(num[0]), cmp_int);

可见,参数列表是两个空指针,现在他要去指向你的数组元素。所以转换为你当前的类型,然后取值。默认升序排列(从小到大),如果想降序排列返回*b-*a即可。

对char型数组排序(同int类型)

char word[100];
int cmp_char(const void* a, const void* b)  //参数格式固定
{return *(char *)a - *(char *)b;  
}
qsort(word, 100, sizeof(word[0]), cmp_char);

对double型数组排序

double in[100];
int cmp_double(const void* a, const void* b)  //参数格式固定
{return *(double *)a > *(double *)b ? 1 : -1;   //特别注意
}
qsort(in, 100, sizeof(in[0]), cmp_double);

注意 在对浮点或者double型的一定要用三目运算符 ,因为要是使用像整型那样相减的话,如果是两个很接近的数则可能返回一个很小的小数(大于-1,小于1),而cmp的返回值是int型,因此会将这个小数返回0,系统认为是相等,失去了本来存在的大小关系

对字符串进行排序

char word[100][10];
int cmp_string(const void* a, const void* b)  //参数格式固定
{return strcmp((char *)a, (char *)b);
}
qsort(word, 100, sizeof(word[0]), cmp_string);

原文链接:https://blog.csdn.net/zhao888789/article/details/79186619

C语言排序函数qsort用法相关推荐

  1. C语言排序函数——qsort

    C语言排序函数--qsort: qsort函数原型: void __cdecl qsort(void *_Base,size_t _NumOfElements,size_t _SizeOfElemen ...

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

    前言: 在一些编程题中经常需要你按照某个指标按照从小到大或从大到小输出一些数据,这时你可以自己写一个排序函数进行排序,但是其实C语言函数库中就有一个排序函数--qsort函数,使用它可以节省你单独写排 ...

  3. C语言排序函数qsort( )

    关于c语言排序的问题,以前我都是用冒泡排序或者快速排序,知道这几天,在杭电上面打ACM的时候,才发现又一种排序的函数,就是qsort(): qsort()括号里面有4个参数 第一个参数是将要排序的数组 ...

  4. php函数find的用法,c语言find函数的用法详解

    c语言find函数的用法详解 C语言之find()函数 find函数用于查找数组中的某一个指定元素的位置. 比如:有一个数组[0, 0, 5, 4, 4]: 问:元素5的在什么位置,find函数 返回 ...

  5. C语言“fread”函数的用法?

    C语言"fread"函数的用法为"size_tf read(void *buffer,size_t size,size_t count,FILE *stream)&quo ...

  6. linux之getcwd函数解析,Linux 中C语言getcwd()函数的用法

    Linux 中C语言getcwd()函数的用法 先来看该函数的声明: #include char *getcwd(char *buf,size_t size); 介绍: 参数说明:getcwd()会将 ...

  7. c语言get()的作用,c语言get函数的用法有哪些

    C语言中gets从标准输入设备读字符串函数,可以无限读取,不会判断上限,今天学习啦小编在这里为大家介绍C语言get函数的用法,欢迎大家阅读! c语言get函数的用法:int getc(FILE *st ...

  8. java中Collections.sort() 排序函数的用法

    java中Collections.sort() 排序函数的用法: 用Collections.sort方法对list排序有两种方法 第一种是list中的对象实现Comparable接口,如下: /** ...

  9. R语言 diag函数的用法

    R语言 diag函数的用法 我们今天写一下关于R语言中diag函数的用法: (1)diag函数可以用来提取矩阵的对角元素,并将它保存成向量的格式.值得注意的是,如果所要提取的矩阵不是方阵的话,diag ...

  10. C语言 strstr函数的用法及模拟实现strstr函数

    C语言 strstr函数的用法及模拟实现strstr函数 一.strstr函数的用法 二.模拟实现strstr函数的功能 一.strstr函数的用法 1.strstr函数原型:char* strstr ...

最新文章

  1. AngularJS快速入门简介
  2. 学成在线--6.CMS页面管理开发(删除页面)
  3. 一次蚂蚁金服的辛酸面试历程
  4. 《如何搭建小微企业风控模型》第十二节 模型检验 节选
  5. python如何实现循环_如何构造python循环
  6. matlab 保存变量
  7. 使用Nexus在Windows中搭建Maven私服
  8. ESP8266/ESP32 驱动ST7789屏幕
  9. Win11如何更改屏幕刷新率?Win11更改屏幕刷新率的方法
  10. 苹果拼图软件测试,视频照片拼图APP
  11. elementUI动态菜单
  12. 个人Ubuntu安装配置
  13. excel 公式 TEXT/INDIRECT/ROW(XX)
  14. Visio 中插入的Excel 如何只显示数据部分?
  15. 【python】又拍云采集工具助手exe带python图片采集源码
  16. 3ds文件转换为.X文件
  17. wordpress显示ICP备案号和公安备案
  18. Javascript之正则表达式学习
  19. 重复购买了相同时间相同批次的机票怎么办
  20. 谈谈Persistent属性

热门文章

  1. 安利一个免费在线的pdf转word、excel、ppt
  2. bootstrap视频教程 jsp_家政服务系统(JAVA,SSM,BOOTSTRAP,JSP,AJAX,MYSQL)+手把手系列视频教程...
  3. PowerDesigner15下载安装
  4. 【PowerDesigner】PowerDesigner的下载及安装
  5. Booth算法乘法器
  6. 压缩文件密码暴力破解——cRARk使用方法
  7. python学习笔记11 百度识图
  8. J2ME、J2SE、J2EE 小讲
  9. 关于Windows mobile设备中心,同步软件不出现,打开卡住问题的解决
  10. 使用outlook邮件服务器,使用OUTLOOK配置邮件服务