排序算法綜述

算法相關(guān)GitHub持續(xù)更新,歡迎打臉~
算法是從事程序開(kāi)發(fā)人員永遠(yuǎn)繞不過(guò)去的一道門。雖然很多時(shí)候我們都會(huì)說(shuō),算法這東西只有面試時(shí)會(huì)用。但很多時(shí)候,算法已經(jīng)被潛移默化的影響著我們,影響著我們寫程序的方式。不知你有沒(méi)有這樣的經(jīng)歷,自己辛辛苦苦寫了幾百行代碼,終于將要實(shí)現(xiàn)的功能實(shí)現(xiàn)了,正怡然自得之時(shí),發(fā)現(xiàn)別人實(shí)現(xiàn)這個(gè)只用了一兩行代碼......</br>
總之,不管你學(xué)與不學(xué),算法就在那里!
不管你屑與不屑,面試官的考題就在那里!
既然這是個(gè)裝逼利器,既然是它總在無(wú)形中改變著什么,既然我們還有時(shí)間去征服,為什么不試試呢?</br>
大學(xué)時(shí)只是形式的學(xué),為了一個(gè)分?jǐn)?shù),認(rèn)為多一分浪費(fèi);現(xiàn)在想想人總是那么厚顏無(wú)恥,叫你學(xué)時(shí)不學(xué),沒(méi)人管了之后卻又想著把失去的補(bǔ)回來(lái),多說(shuō)無(wú)益,開(kāi)始鞭策自己,權(quán)當(dāng)從零開(kāi)始。</br>
排序是《數(shù)據(jù)結(jié)構(gòu)》里一個(gè)重要的一脈,從我們?nèi)粘5臉I(yè)務(wù)處理到數(shù)據(jù)庫(kù)的排序,都有對(duì)排序算法應(yīng)用的淋漓盡致,接下來(lái)的幾個(gè)星期,征服排序算法!</br>

知己知彼,百戰(zhàn)不殆
我們先回顧一下幾種常見(jiàn)的常用算法,從不同的維度比較各個(gè)算法的優(yōu)劣。</br>
時(shí)間復(fù)雜度
計(jì)算機(jī)科學(xué)中,算法的時(shí)間復(fù)雜度是一個(gè)函數(shù),它定量描述了該算法的運(yùn)行時(shí)間。這是一個(gè)關(guān)于代表算法輸入值的字符串的長(zhǎng)度的函數(shù)。時(shí)間復(fù)雜度常用大O符號(hào)表述,不包括這個(gè)函數(shù)的低階項(xiàng)和首項(xiàng)系數(shù)。使用這種方式時(shí),時(shí)間復(fù)雜度可被稱為是漸近的,它考察當(dāng)輸入值大小趨近無(wú)窮時(shí)的情況。</br>
空間復(fù)雜度
空間復(fù)雜度(Space Complexity)是對(duì)一個(gè)算法在運(yùn)行過(guò)程中臨時(shí)占用存儲(chǔ)空間大小的量度,記做S(n)=O(f(n))。比如直接插入排序的時(shí)間復(fù)雜度是O(n^2),空間復(fù)雜度是O(1) 。而一般的遞歸算法就要有O(n)的空間復(fù)雜度了,因?yàn)槊看芜f歸都要存儲(chǔ)返回信息。一個(gè)算法的優(yōu)劣主要從算法的執(zhí)行時(shí)間和所需要占用的存儲(chǔ)空間兩個(gè)方面衡量。

排序法 最差時(shí)間分析 平均時(shí)間復(fù)雜度 穩(wěn)定度 空間復(fù)雜度 類型
冒泡排序 O(n2) O(n2) 穩(wěn)定 O(1) 交換
快速排序 O(n2) O(n log2n) 不穩(wěn)定 O(log2n)~O(n) 交換
選擇排序 O(n2) O(n2 ) 穩(wěn)定 O(1) 選擇
堆排序 O(n log2n) O(n log2n) 不穩(wěn)定 O(1) 選擇
插入排序 O(n2) O(n2) 穩(wěn)定 O(1) 插入
希爾排序 O(n) O(n2) 不穩(wěn)定 O(1) 插入
歸并排序 O(n log2n) O(n log2n) 穩(wěn)定 O(n) 其他
基數(shù)/桶排序 O(d*(r+n)) O(d*(r+n)) 穩(wěn)定 O(rd+n) 分配
二叉樹(shù)排序 O(n2) O(n log2n) 不一定 O(n) 其他

<i>@author Swift</i>
<i>@date 2017-1-8</i>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,308評(píng)論 0 52
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,831評(píng)論 0 15
  • 概述排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的...
    Luc_閱讀 2,379評(píng)論 0 35
  • 該系列文章主要是記錄下自己暑假這段時(shí)間的學(xué)習(xí)筆記,暑期也在實(shí)習(xí),抽空學(xué)了很多,每個(gè)方面的知識(shí)我都會(huì)另起一篇博客去記...
    Yanci516閱讀 12,706評(píng)論 6 19
  • 來(lái)簡(jiǎn)書的半個(gè)月,我發(fā)現(xiàn)這里的高中學(xué)生也很多,不禁就想寫這樣一篇文章,希望可以幫助到你們。 暑假還未結(jié)束,新一屆的高...
    木樨枝冷閱讀 3,651評(píng)論 29 33

友情鏈接更多精彩內(nèi)容