前言
我们需先了解qsort函数
qsort函数详解:http://t.csdnimg.cn/rTNv9
qsort函数可以排序多种数据类型,很是神奇,这是为什么,我们在里模拟实现这样的功能
目录
1. qsort函数模拟实现
2. 我们使用bubble_sort函数排序整形数组:
3. 再来排一下结构体:
1. qsort函数模拟实现
qsort函数内部是用快速排序实现的,在这里我们用冒泡排序实现
若还不清楚冒泡排序请看
冒泡排序:http://t.csdnimg.cn/p0oHx
我们创建一个bubble_sort函数来模拟实现qsort函数
函数可以排多种数据类型,参数绝对不能是int 类型,因此我们如此创建
void*可以存放多种类型的元素首地址,我们还要知道这个数组中有多少元素,元素个数一定是正数,size_t类型等同于unsigned int类型,还要知道每个元素占多少个字节,方便后面交换元素,还有一个用于比较的函数地址
因此bubble_sort函数主体是这样的:
if后使用我们传入的函数compar函数,完成比较并返回正数,负数,或0若前面的大则交换,调用swap函数。因为void*类型没法进行加减无法遍历数组,我们又知道最小的数据类型char是一字节,因此强制类型转换为char*类型,此时传入的数组每个与元素的字节大小发挥了重要作用,进行数组所有元素地址的计算,传给swap函数,
我们来看看swap函数:
用char类型进行元素的交换,
在这里举整形数组的例子:相当于将要交换的相邻整形都变成4个char类型进行交换,进行相对应的交换,以width==4进行循环后,整体上将相邻的整形交换成功了。其他的数据类型同理。
因此qsort函数至此模拟实现完成
2. 我们使用bubble_sort函数排序整形数组:
执行结果:
排序成功!!!
3. 再来排一下结构体:
执行结果:
排序成功!!!
至此我们成功实现了qsort函数的功能,我们的C语言功底又厚了一步。
感谢观看,感谢指正。