欢迎光临散文网 会员登陆 & 注册

C语言不完全复习手册之快速排序

2022-06-03 11:35 作者:会整活的剑人  | 我要投稿

咱就是说 上online judge做航C复习题和前面的上机题啥的,看见排序的题咱只会qsort,咣咣咣都给他写出来.冒泡排序和选择排序不会没关系!自从cbj会qsort以后再也没用过冒泡排序和选择排序啥的了.

为什么qsort可以应对几乎所有的排序?

因为他快,时间复杂度比冒泡排序和选择排序更优,处理相同数量的未排序数据他更快.

因为他通用,你可以把排序的问题转换成如何比较两个数组元素大小的问题,不用care排序的细节,像手写冒泡排序啥的你还要考虑交换的写法什么的.

ok下面说下qsort怎么用

zhei图是MSVC里面的qsort:

Windows通用C运行时

大概长这样,如果看不明白这是啥没关系!

县长:师爷,来翻译翻译什么叫qsort


第一个参数 base 一个指针,指向没排序的数组

第二个参数 num base指向的那个数组里面有多少个元素要排序

第三个参数 size 每个元素占多少存储空间,不用自己写,你用sizeof取一下就完事了

第四个参数 comparefunction 他是个函数指针,指向一个比较函数(告诉qsort怎么定义两个元素谁大谁小)

惊喜就是你会了这个后面再也不怕排序了.

比较函数能且仅能长成这个样子

int functionname(const void *p,const void *q);

返回int型,如果小于0表示指针p指向的元素要排在q指向元素的前面,大于0示指针p向的元素要排在q指向元素的后面

举个例子比如说对一堆整数排序,大的在后面,小的在前.

或者是这样,比较double型大小,大的在后面,小的在前面.

哪怕比较的规则很奇怪也没关系

oj上的某个题目

咱照样能写出来(注意m是个全局的long long变量,开在函数外面)

字符串的题目也能做

你对char排序不就ok了吗?

对结构排序也没问题

就照题目要求说的做就ok了

会写compare函数了,怎么调用还用我介绍吗?

来吧,上例子.



C语言不完全复习手册之快速排序的评论 (共 条)

分享到微博请遵守国家法律