C语言不完全复习手册之快速排序
咱就是说 上online judge做航C复习题和前面的上机题啥的,看见排序的题咱只会qsort,咣咣咣都给他写出来.冒泡排序和选择排序不会没关系!自从cbj会qsort以后再也没用过冒泡排序和选择排序啥的了.
为什么qsort可以应对几乎所有的排序?
因为他快,时间复杂度比冒泡排序和选择排序更优,处理相同数量的未排序数据他更快.
因为他通用,你可以把排序的问题转换成如何比较两个数组元素大小的问题,不用care排序的细节,像手写冒泡排序啥的你还要考虑交换的写法什么的.
ok下面说下qsort怎么用
zhei图是MSVC里面的qsort:

大概长这样,如果看不明白这是啥没关系!
县长:师爷,来翻译翻译什么叫qsort

第一个参数 base 一个指针,指向没排序的数组
第二个参数 num base指向的那个数组里面有多少个元素要排序
第三个参数 size 每个元素占多少存储空间,不用自己写,你用sizeof取一下就完事了
第四个参数 comparefunction 他是个函数指针,指向一个比较函数(告诉qsort怎么定义两个元素谁大谁小)
惊喜就是你会了这个后面再也不怕排序了.
比较函数能且仅能长成这个样子
int functionname(const void *p,const void *q);
返回int型,如果小于0表示指针p指向的元素要排在q指向元素的前面,大于0表示指针p指向的元素要排在q指向元素的后面
举个例子比如说对一堆整数排序,大的在后面,小的在前面.
或者是这样,比较double型大小,大的在后面,小的在前面.
哪怕比较的规则很奇怪也没关系

咱照样能写出来(注意m是个全局的long long变量,开在函数外面)
字符串的题目也能做

你对char排序不就ok了吗?
对结构排序也没问题

就照题目要求说的做就ok了
会写compare函数了,怎么调用还用我介绍吗?
来吧,上例子.

