都中秋了还在苦苦加班排序?这篇文章让你一次性搞定排序问题,手把手教你实现一个通用的排序函数

大家好呀,今天是中秋佳节,大家都回家和家人团聚了吗?

今年的月饼好吃吗?

不管怎么样,博主都在这里祝大家中秋节快乐~~

今天我们就来写一个功能强大的通用类型排序函数吧!

每次我们写一个不同类型的排序的时候,我们都要写重新写一个新的排序函数,那么有没有什么方法,可以写一个适用于所有类型的排序函数呢?

当然是有的!接下来我们就一起来看看吧~

原型

首先我们知道库函数中有一个qsort函数,它其实就适用于任何类型的数据。

(不要问我为什么已经有了qsort函数还非要自己写一个,我知道你们都跟我一样热爱学习,必须要自己写出来才肯罢休!)
在这里插入图片描述
所以,作为我们的通用排序函数的原型,我们首先要搞懂别人(qsort)是怎么做到“通用”的,只用把别人的工具弄明白了,我们才能写出属于自己的工具。

首先我们再cplusplus网站中看看qsort这个函数的真容。

在这里插入图片描述
首先我们看到第一个参数是一个指针,指针的类型是void*,这表示可以接收任意类型的指针,包括整型指针、字符指针、浮点型指针、结构体指针等等。

这样,我们在传参的时候就可以把任意类型的数组作为参数传给qsort,达到一个通用的方式。

后面的参数分别是size_t num、size_t size和
int (compar)(const void,const void*)),它们分别是什么意思呢?我们可以带着疑问和猜测继续往下看。

在这里插入图片描述

看到这里,我们应该大概知道,这个函数可以实现通用排序的原理。

我们先接收一个指向被排序的数组的指针,然后告诉函数我们要排序的数据的数量以及每个元素的大小,最后再告诉函数这些数据之间应该怎么排序。然后剩下的交给函数按照我们的规则和要求去执行就可以了。

那么下面我们就先用qsort函数来实现排序。

首先我们把一个int数组arr由降序排为升序。
在这里插入图片描述
那么除了给整型数组、字符数组等等我们常见的数组之外,我们尝试着用qsort给结构体进行排序。

首先我们创建一个结构体,在这个结构体类型之上创建相应的变量并初始化。

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值