服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言中关于库函数 qsort 快排的用法

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

2022-01-06 13:53飞人01_01 C/C++

快速排序Qsort是所有学习算法和数据结构最基础的一个部分,也是考试题和面试的一个小重点。本片文章带你了解Qsort的详细用法规则

前言

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

一、库函数(qsort)的含义

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

 

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

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

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

1. 第一个参数

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

2. 第二个参数

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

3. 第三个参数

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

4. 第四个参数

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

int cmp_int(const void* e1, const void* 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], 当我们使用寻址操作符时,计算机会知道我们所需要访问的空间大小吗??显然,它是不知道的。寻址操作符是根据数据的类型,根据类型的大小去访问内存空间。这里我们需要 强制类型转换 为整形才可以去访问的,不然计算机也不知道我们具体需要访问多大的内存空间。是吧。
讲到这里呢,也就讲完了,我们看具体的代码实现吧。。

 

三、函数实现

//qsort的用法
#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void* e1, const void* e2)
{
	//e1-e2,得到的是升序
	return *(int*)e1 - *(int*)e2;
}

int main()
{
	int arr[10] = { 2,3,1,4,5,6,7,9,8,10 };

	int sz = sizeof(arr) / sizeof(arr[0]);

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

	int i = 0;
	for (i = 0; i < sz; i++)
		printf("%d ", arr[i]);
	return 0;
}

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

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

 

四、总结

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

最后祝大家的编程技术更上一层楼。加油,共勉。还有啊,英语不好的小伙伴,一定要把英语补起来哦,鄙人就是高中没好好学英语,现在查文件,上GitHub等等,很费力啊。

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

到此这篇关于C语言中关于库函数 qsort 快排的用法的文章就介绍到这了,更多相关C语言 qsort快排内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/x0919/article/details/112121038

延伸 · 阅读

精彩推荐
  • C/C++OpenCV实现拼接图像的简单方法

    OpenCV实现拼接图像的简单方法

    这篇文章主要为大家详细介绍了OpenCV实现拼接图像的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    iteye_183805102021-07-29
  • C/C++关于C语言中E-R图的详解

    关于C语言中E-R图的详解

    今天小编就为大家分享一篇关于关于C语言中E-R图的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    Struggler095962021-07-12
  • C/C++深入C++拷贝构造函数的总结详解

    深入C++拷贝构造函数的总结详解

    本篇文章是对C++中拷贝构造函数进行了总结与介绍。需要的朋友参考下...

    C++教程网5182020-11-30
  • C/C++C语言实现双人五子棋游戏

    C语言实现双人五子棋游戏

    这篇文章主要为大家详细介绍了C语言实现双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    两片空白7312021-11-12
  • C/C++使用C++制作简单的web服务器(续)

    使用C++制作简单的web服务器(续)

    本文承接上文《使用C++制作简单的web服务器》,把web服务器做的功能稍微强大些,主要增加的功能是从文件中读取网页并返回给客户端,而不是把网页代码...

    C++教程网5492021-02-22
  • C/C++c/c++实现获取域名的IP地址

    c/c++实现获取域名的IP地址

    本文给大家汇总介绍了使用c/c++实现获取域名的IP地址的几种方法以及这些方法的核心函数gethostbyname的详细用法,非常的实用,有需要的小伙伴可以参考下...

    C++教程网10262021-03-16
  • C/C++C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下...

    ieearth6912021-05-16
  • C/C++c/c++内存分配大小实例讲解

    c/c++内存分配大小实例讲解

    在本篇文章里小编给大家整理了一篇关于c/c++内存分配大小实例讲解内容,有需要的朋友们可以跟着学习参考下。...

    jihite5172022-02-22