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++ map索引不存在的key可能导致的后果分析

    c++ map索引不存在的key可能导致的后果分析

    这篇文章主要介绍了c++ map索引不存在的key可能导致的后果分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • C语言实现的bitmap位图代码分享

    C语言实现的bitmap位图代码分享

    这篇文章主要介绍了C语言实现的bitmap位图代码分享,位图(bitmap)是一种非常常用的结构,在索引、数据压缩等方面有广泛应用,需要的朋友可以参考下
    2014-08-08
  • 使用C++绘制GDI位图的基本编写实例

    使用C++绘制GDI位图的基本编写实例

    这篇文章主要介绍了使用C++绘制GDI位图的基本编写实例,一般来说适用于Windwos下的C++的GUI编程,需要的朋友可以参考下
    2015-12-12
  • c语言 数据结构实现之字符串

    c语言 数据结构实现之字符串

    这篇文章主要介绍了c语言 数据结构实现之字符串的相关资料,需要的朋友可以参考下
    2017-05-05
  • 基础C语言编程时易犯错误有哪些

    基础C语言编程时易犯错误有哪些

    基础C语言编程时易犯错误有哪些?这篇文章主要介绍了C语言编程时常见的错误,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • C语言示例讲解while循环语句的用法

    C语言示例讲解while循环语句的用法

    在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,C语言while语句可以是单个语句,也可以是一个语句块,其条件可以是任意表达式,true是任意非零值,当条件为真时,循环进行迭代
    2022-06-06
  • C++隐式转换问题分析及解决办法

    C++隐式转换问题分析及解决办法

    在本篇文章里小编给大家整理了关于C++隐式转换问题分析及解决办法,有需要的朋友们可以学习下。
    2020-02-02
  • C++利用EasyX编写贪吃蛇游戏的示例代码

    C++利用EasyX编写贪吃蛇游戏的示例代码

    EasyX, 全名EasyX Graphics Library, 是针对 Visual C++ 的免费绘图库,本文将为大家介绍如何使用EasyX编写贪吃蛇游戏,需要的小伙伴可以参考下
    2023-08-08
  • 使用c++实现异或加密的代码示例

    使用c++实现异或加密的代码示例

    这篇文章主要为大家介绍了c++实现异或加密的代码示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • C语言二维数组几种常用的表示方法

    C语言二维数组几种常用的表示方法

    今天小编就为大家分享一篇关于C语言二维数组几种常用的表示方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03

最新评论