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

 更新时间:2021年09月16日 09:27:44   作者:飞人01_01  
快速排序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;
}

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

在这里插入图片描述

四、总结

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

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

在这里插入图片描述

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

相关文章

  • 好用的C++ string Format“函数”介绍

    好用的C++ string Format“函数”介绍

    大家好,本篇文章主要讲的是好用的C++ string Format“函数”介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • C++第三方日志库log4cplus的安装与使用配置教程

    C++第三方日志库log4cplus的安装与使用配置教程

    log4cplus是C++编写的开源的日志系统,log4cplus具有线程安全、灵活、以及多粒度控制的特点,本文给大家介绍C++第三方日志库log4cplus的安装与使用教程,感兴趣的朋友一起看看吧
    2022-02-02
  • C语言数据结构之线索二叉树及其遍历

    C语言数据结构之线索二叉树及其遍历

    这篇文章主要介绍了C语言数据结构之线索二叉树及其遍历的相关资料,为了加快查找节点的前驱和后继。对二叉树的线索化就是对二叉树进行一次遍历,在遍历的过程中检测节点的左右指针是否为空,如果是空,则将他们改为指向前驱和后继节点的线索,需要的朋友可以参考下
    2017-08-08
  • 如何使用arm-none-eabi-gcc编译器搭建STM32的Vscode开发环境

    如何使用arm-none-eabi-gcc编译器搭建STM32的Vscode开发环境

    这篇文章主要介绍了使用arm-none-eabi-gcc编译器搭建STM32的Vscode开发环境,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • 使用CMake构建一个简单的C++项目的实现

    使用CMake构建一个简单的C++项目的实现

    CMake是一个跨平台的自动化构建工具,可以用于构建各种类型的项目,本文主要介绍了使用CMake构建一个简单的C++项目,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • C++ 中virtual 虚函数用法深入了解

    C++ 中virtual 虚函数用法深入了解

    这篇文章主要介绍了C++ 中virtual 虚函数用法深入了解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • C语言自定义数据类型的结构体、枚举和联合详解

    C语言自定义数据类型的结构体、枚举和联合详解

    这篇文章主要给大家介绍了关于C语言自定义数据类型的结构体、枚举和联合的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 使用C语言构建基本的二叉树数据结构

    使用C语言构建基本的二叉树数据结构

    这篇文章主要介绍了使用C语言使用C语言构建基本的二叉树数据结构,包括根据前序序列和中序序列构建二叉树的方法,需要的朋友可以参考下
    2015-08-08
  • 浅谈c++11线程的互斥量

    浅谈c++11线程的互斥量

    互斥量是个类对象,理解成一把锁(保护共享数据,其他想操作共享数据的线程必须等待解锁),互斥量使用要小心,保护数据不多也不少,少了则没达到保护效果,多了则影响效率。本文将介绍c++11线程的互斥量,感兴趣的同学,可以参考下。
    2021-06-06
  • C++解析Json的方法详解【jsoncpp】

    C++解析Json的方法详解【jsoncpp】

    这篇文章主要介绍了C++解析Json的方法,结合实例形式分析了C++操作json格式数据的相关实现技巧与注意事项,需要的朋友可以参考下
    2017-06-06

最新评论