C语言中自己实现了一个排序,为什么会比 qsort 的速度慢几十倍不止?
讲到算法,有一个非常重要的前置知识叫时间复杂度,脱离了这个讲算法的优劣是没什么意义的。这个概念主要是指,你数据量的增加,会让算法的处理时间增加多少。最近很多小伙伴找我,说想要一些C语言的资料,然后我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「C语言专业入门到高级教程+工具包」,点个关注,全部无偿共享给大家!!!
评论区回复“888”,关注我之后私信回复“666”,即可拿走。
简单来说,有些算法你输入1组数据、10组数据、100组数据,它们处理的耗时是相同的,这个叫常数复杂度,写作O(1);而有些算法,输入1组数据用时一秒、输入10组数据用时2秒、输入100组数据用时3秒,这个叫对数复杂度,写作O(logn);还有些算法,输入1组数据用时1秒、输入10组数据,用时10秒、输入100组数据,用时100秒,这个叫线性复杂度,写作O(n)。更高耗时倍率的我就不写了,后面还有很多类似于指数复杂度,阶乘复杂度。对上面这些举例给一个对应的现实中例子的话,有个经典老梗叫书店门口的报警器。如果是很高端的报警器,你拿着一摞书出去,如果有书没交费,他会直接提醒你书名为某某的某些书没交费,这个就是常数复杂度,你一次拿多少本书,经过一次都能告诉你哪些书没交费。而如果是普通的报警器,只能报一堆书里有没有,在你比较傻的时候,你会选择一本一本去过,一次次测试是哪本书报警了,这就是线性复杂度。如果你比较机智,你可以把这堆书分为等量的两部分,分别去过,如果哪堆报警了,就把那堆再分两部分,再分别过,这样每次减少一半的工作量,远比一本本过快,这个就是对数复杂度。