冒泡排序整型
使用冒泡排序完成所有类型的数据排序之前,先学习一下快速排序(qsort)函数,为什么这个函数能够排序所有类型的数据。
快速排序(qsort)函数
MSDN查看函数的结构以及函数具体使用情况。
返回类型:void类型。参数:void*、两个无符号的整型、函数指针。函数指针的返回类型是int类型,参数是两个const void*。qsort函数的头文件是stdlib.h。
base:待排序数据的起始位置。
num:数组的元素个数。
width:一个元素的字节大小。
compare:比较函数(使用者根据实际情况实现一个比较函数)。
elem1、elem2:待比较两个元素的地址。
qsort函数的设计
void* base,为了qsort能够排序任何类型的数据,要接收任何类型的数据,只能用void*指针来接收。
size_t num,排序需要知道要排序的元素有多少个。
size_t width,接收的指针是void*指针,void*无法知道指向的对象数据占多少个字节,该指针无法进行解引用,不清楚访问下一个元素的时候需要跳过多少字节的大小,所以需要知道每个元素的大小,通过num和width就能知道全部元素已经元素的大小进行排序。
int (*cmpare)(const void* elem1, const void* elem2),设计qsort的人,并不知道使用者需要排序的数据类型,不同的类型的数据比较的方法是有所差异的,就需要使用者来实现比较函数,这个比较函数是回调函数,将函数的地址传给qsort函数,qsort使用函数指针调用比较函数,完成数据的比较。比较函数的参数为const void*类型,不知道排序的数据类型,用void*接收;为了避免错误操作,修改内容,用const修饰指针,指针不能通过*解引用修改内容。