C語言中自己實現(xiàn)了一個排序為什么會比 qsort 的速度慢幾十倍不止
C語言中自己實現(xiàn)了一個排序,為什么會比 qsort 的速度慢幾十倍不止?
講到算法,有一個非常重要的前置知識叫時間復(fù)雜度,脫離了這個講算法的優(yōu)劣是沒什么意義的。這個概念主要是指,你數(shù)據(jù)量的增加,會讓算法的處理時間增加多少。最近很多小伙伴找我,說想要一些C語言的資料,然后我根據(jù)自己從業(yè)十年經(jīng)驗,熬夜搞了幾個通宵,精心整理了一份「C語言專業(yè)入門到高級教程+工具包」,點(diǎn)個關(guān)注,全部無償共享給大家?。?!
評論區(qū)回復(fù)“888”,關(guān)注我之后私信回復(fù)“666”,即可拿走。
簡單來說,有些算法你輸入1組數(shù)據(jù)、10組數(shù)據(jù)、100組數(shù)據(jù),它們處理的耗時是相同的,這個叫常數(shù)復(fù)雜度,寫作O(1);而有些算法,輸入1組數(shù)據(jù)用時一秒、輸入10組數(shù)據(jù)用時2秒、輸入100組數(shù)據(jù)用時3秒,這個叫對數(shù)復(fù)雜度,寫作O(logn);還有些算法,輸入1組數(shù)據(jù)用時1秒、輸入10組數(shù)據(jù),用時10秒、輸入100組數(shù)據(jù),用時100秒,這個叫線性復(fù)雜度,寫作O(n)。更高耗時倍率的我就不寫了,后面還有很多類似于指數(shù)復(fù)雜度,階乘復(fù)雜度。對上面這些舉例給一個對應(yīng)的現(xiàn)實中例子的話,有個經(jīng)典老梗叫書店門口的報警器。如果是很高端的報警器,你拿著一摞書出去,如果有書沒交費(fèi),他會直接提醒你書名為某某的某些書沒交費(fèi),這個就是常數(shù)復(fù)雜度,你一次拿多少本書,經(jīng)過一次都能告訴你哪些書沒交費(fèi)。而如果是普通的報警器,只能報一堆書里有沒有,在你比較傻的時候,你會選擇一本一本去過,一次次測試是哪本書報警了,這就是線性復(fù)雜度。如果你比較機(jī)智,你可以把這堆書分為等量的兩部分,分別去過,如果哪堆報警了,就把那堆再分兩部分,再分別過,這樣每次減少一半的工作量,遠(yuǎn)比一本本過快,這個就是對數(shù)復(fù)雜度。