news 2026/4/29 14:57:30

C语言中关于库函数 qsort 快排的用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言中关于库函数 qsort 快排的用法

前言

我也只是一个奋斗的程序猿,仅以此篇文章,作为我学习的见证,可能我的文采不好,有时候讲的词不达意,但我尽力去做好我想做的这些事情,如果此篇文章能够给各位读者带来一定的认识,那自然是最好的。若文章中有鄙人讲错了的,欢迎评论区指点。谢谢!!!

一、库函数(qsort)的含义

  1. 头文件#include <stdlib.h>
  2. 作用:将一个无序的数组进行有序的排列。这就是这个库函数的作用。

二、(qsort)函数的实现方式,话不多说,请看。

void qsort( voidbase,
size_t num,
size_t width,
cmp_int );

全是英语看不懂?别担心,让我慢慢为你道来!!!

1. 第一个参数

voidbase, 这个参数的意思就是 将要排序的那个数组 ,我们在写的时候,直接写数组名就行了。

2. 第二个参数

size_t num, 第二个参数的意思就是 voidbase,这个数组的元素个数。比如int arr[10],这里就写10,这里举个栗子,下面会继续讲解。

3. 第三个参数

size_t width, 这第三个参数呢,灰常简单,就是该数组元素的 大小 ,例如:整形数组 int arr[10],元素大小就是4个字节,因为整形(int)在内存中占的就是4个字节的空间。

4. 第四个参数

这最后一个参数呢,稍微复杂那么一点点的参数,也不难的。往下看。 cmp_int , 其实在MSDN上这里写得稍微看上去很复杂,这里呢,我将这第四个参数封装为一个函数,让我们看上去简单一点,实则原理都是相同的。具体的函数实现如下:

1

2

3

4

5

intcmp_int(constvoid* e1,constvoid* e2)

{

//e1-e2,得到的是升序

return*(int*)e1 - *(int*)e2;

}

1). 函数的参数

const void* e1 和 const void* e2,两个参数接收的都是数组里面元素的地址, void* 意思就是无类型指针,它呢,比较特殊,它可以接收来自任何类型的值,比如float、int、char等等,它都能接收。至于这里的 const 就是修饰(*e1)或(*e2),当有 const 修饰时,这两个的值就不能被修改,具体的,大家可以查一下,这里就不多讲了。

2). 这第四个参数的重点

当e1减去e2时,我们最后输出得到的就是 升序 的结果,当然,e2减去e1,就是 降序 。口诀: 左减右为升,反之则降 。大家可能还注意到了 e1 前面还有个圆括号,(int *)e1,为什么呢???我们所要排序的数组是整形数组 int arr[10], 当我们使用寻址操作符时,计算机会知道我们所需要访问的空间大小吗??显然,它是不知道的。寻址操作符是根据数据的类型,根据类型的大小去访问内存空间。这里我们需要 强制类型转换 为整形才可以去访问的,不然计算机也不知道我们具体需要访问多大的内存空间。是吧。
讲到这里呢,也就讲完了,我们看具体的代码实现吧。。

三、函数实现

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

//qsort的用法

#include <stdio.h>

#include <stdlib.h>

intcmp_int(constvoid* e1,constvoid* e2)

{

//e1-e2,得到的是升序

return*(int*)e1 - *(int*)e2;

}

intmain()

{

intarr[10] = { 2,3,1,4,5,6,7,9,8,10 };

intsz =sizeof(arr) /sizeof(arr[0]);

qsort(arr, sz,sizeof(arr[0]), cmp_int);

inti = 0;

for(i = 0; i < sz; i++)

printf("%d ", arr[i]);

return0;

}

最后看一下我们输出的结果:

四、总结

快速排序不仅仅只是排序整形哦,还可以浮点型等等,我们在对不同类型的数据进行排序时,只需要注意最后一个参数里面的内容稍有改动,其他的大致差不多,特别记住 左减右为升,反之则降 哦,这个记住了,也就懂了这个库函数是怎么用的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 14:57:29

DeepEval终极指南:10分钟掌握企业级AI模型评测框架

DeepEval终极指南&#xff1a;10分钟掌握企业级AI模型评测框架 【免费下载链接】deepeval The LLM Evaluation Framework 项目地址: https://gitcode.com/GitHub_Trending/de/deepeval 你是否曾为AI模型的输出质量而头疼&#xff1f;&#x1f914; 想象一下&#xff0c;…

作者头像 李华
网站建设 2026/4/29 14:57:00

2026毕业季降AI省钱必看:5款主流工具综合性价比盘点全公开!

2026 毕业季最大的省钱秘诀&#xff1a;别只盯单价&#xff0c;看综合性价比。 身边毕业的同学已经开始陆续把降 AI 工具用起来了&#xff0c;最常见的踩坑都是「冲着 1.2 元/千字单价去&#xff0c;最后花了 200 多」。这次盘点把综合性价比最高的 5 款工具放出来&#xff0c…

作者头像 李华
网站建设 2026/4/29 14:53:39

ComfyUI-Inspire-Pack:AI绘画创作效率提升的终极扩展包

ComfyUI-Inspire-Pack&#xff1a;AI绘画创作效率提升的终极扩展包 【免费下载链接】ComfyUI-Inspire-Pack This repository offers various extension nodes for ComfyUI. Nodes here have different characteristics compared to those in the ComfyUI Impact Pack. The Impa…

作者头像 李华
网站建设 2026/4/29 14:48:50

实战Excel数据处理:JavaScript高效解决方案深度解析

实战Excel数据处理&#xff1a;JavaScript高效解决方案深度解析 【免费下载链接】exceljs Excel Workbook Manager 项目地址: https://gitcode.com/gh_mirrors/ex/exceljs 你是否曾经为处理复杂的Excel数据而烦恼&#xff1f;无论是生成报表、数据导出还是自动化处理&am…

作者头像 李华