大家好呀,今天是中秋佳节,大家都回家和家人团聚了吗?
今年的月饼好吃吗?
不管怎么样,博主都在这里祝大家中秋节快乐~~
今天我们就来写一个功能强大的通用类型排序函数吧!
【手把手教你实现】通用排序函数
每次我们写一个不同类型的排序的时候,我们都要写重新写一个新的排序函数,那么有没有什么方法,可以写一个适用于所有类型的排序函数呢?
当然是有的!接下来我们就一起来看看吧~
原型
首先我们知道库函数中有一个qsort函数,它其实就适用于任何类型的数据。
(不要问我为什么已经有了qsort函数还非要自己写一个,我知道你们都跟我一样热爱学习,必须要自己写出来才肯罢休!)
所以,作为我们的通用排序函数的原型,我们首先要搞懂别人(qsort)是怎么做到“通用”的,只用把别人的工具弄明白了,我们才能写出属于自己的工具。
首先我们再cplusplus网站中看看qsort这个函数的真容。
首先我们看到第一个参数是一个指针,指针的类型是void*,这表示可以接收任意类型的指针,包括整型指针、字符指针、浮点型指针、结构体指针等等。
这样,我们在传参的时候就可以把任意类型的数组作为参数传给qsort,达到一个通用的方式。
后面的参数分别是size_t num、size_t size和
int (compar)(const void,const void*)),它们分别是什么意思呢?我们可以带着疑问和猜测继续往下看。
看到这里,我们应该大概知道,这个函数可以实现通用排序的原理。
我们先接收一个指向被排序的数组的指针,然后告诉函数我们要排序的数据的数量以及每个元素的大小,最后再告诉函数这些数据之间应该怎么排序。然后剩下的交给函数按照我们的规则和要求去执行就可以了。
那么下面我们就先用qsort函数来实现排序。
首先我们把一个int数组arr由降序排为升序。
那么除了给整型数组、字符数组等等我们常见的数组之外,我们尝试着用qsort给结构体进行排序。
首先我们创建一个结构体,在这个结构体类型之上创建相应的变量并初始化。