10种排序算法基础总结
基于比較的排序:
基礎(chǔ)排序:
?冒泡排序:誰大誰上,每一輪都把最大的頂?shù)教旎ò?效率太低——掌握swap。
選擇排序:效率較低,但經(jīng)常用它內(nèi)部的循環(huán)方式來找最大值和最小值。
插入排序:雖然平均效率低,但是在序列基本有序時(shí),它很快,所以也有其適用范圍。
希爾排序(縮小增量排序):是插排的改良,對空間思維訓(xùn)練有幫助 時(shí)間復(fù)雜度O(n1.3),介于O(nlgn)~O(n2)之間
分治法:
快速排序:是軟件工業(yè)中最常見的常規(guī)排序法,其雙向指針掃描和分區(qū)算法是核心,特別地partition算法用來劃分不同性質(zhì)的元素,如選擇第K大元素的問題。快速排序時(shí)間復(fù)雜度為O(NlgN),但是如果主元不是中位數(shù)的話,特別地如果每次主元都在數(shù)組區(qū)間的一側(cè),復(fù)雜度將退化為N2,工業(yè)上的優(yōu)化方法見快速排序分區(qū)以及優(yōu)化方法。快速排序重視子問題的劃分。
歸并排序:分治法的完美使用,開辟了輔助空間,常見的題目如逆序?qū)?shù),歸并排序重視子問題的解的合并
堆排序:用到了二叉堆數(shù)據(jù)結(jié)構(gòu),是繼續(xù)掌握樹結(jié)構(gòu)的起手式 堆排序 ?= 插排 + 二分查找
上面三個(gè)都是NlgN的復(fù)雜度,其中快排表現(xiàn)最好,是原址的不用開辟輔助空間;歸并排序需要開辟輔助空間;堆排也是原址的,但是常數(shù)因子較大,不具備優(yōu)勢。
基于非比較排序:
計(jì)數(shù)排序:可以說是最快的,用它來解決問題時(shí)必須注意如果序列中的值分布非常廣(最大值很大,元素分布很稀疏),那么空間將會浪費(fèi)很多,所以計(jì)數(shù)排序的使用范圍是:序列的關(guān)鍵字比較集中,已知邊界,且邊界較小。
桶排序:用它解決問題必須注意序列的值是否均勻地分布在桶中。如果不均勻,那么個(gè)別桶中的元素會遠(yuǎn)多于其他桶,桶內(nèi)排序用比較排序,極端情況下,全部元素在一個(gè)桶內(nèi),那么復(fù)雜度還是會退化成NlgN。
基數(shù)排序:kN級別(k是最大數(shù)的位數(shù))是整數(shù)數(shù)值型排序里面又快又穩(wěn)的,無論元素分布如何,只開辟固定的輔助空間(10個(gè)桶),基數(shù)排序幾乎不需要任何“比較”操作。因此,在實(shí)際應(yīng)用中,對十進(jìn)制整數(shù)來說,基數(shù)排序更好用。
上面三種排序其實(shí)都是支持負(fù)數(shù)的,我們可以找出最小的數(shù)來,計(jì)算出與0的距離,然后把所有的數(shù)同時(shí)減去這個(gè)距離,這樣就全部成為自然數(shù),排好序然后再恢復(fù)回去就OK了。
十種排序算法對比:
?
轉(zhuǎn)載于:https://www.cnblogs.com/xiaoyh/p/10286280.html
總結(jié)
以上是生活随笔為你收集整理的10种排序算法基础总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: etcd、flannel的安装---单节
- 下一篇: 2.3_模型和交叉检验