十大演算法總結

2021-10-23 23:18:34 字數 1588 閱讀 9052

排序演算法的總結:

#基礎排序

a.冒泡

誰大誰上,每一輪都把最大的頂到天花板

效率太低o(n²)——掌握swap

b.選擇排序,效率較低,但經常用它內部的迴圈方式來找最大值和最小值——怎麼一次性求出陣列的最大值和最小值

o(n²)

c.插排,雖然平均效率低,但是在序列基本有序時,它很快,所以也有其適用範圍

arrays這個工具類在1.7裡面做了較大改動

d.希爾(縮小增量排序),是插排的改良,對空間思維訓練有幫助

#分治法

1.子問題拆分

2.遞迴求解子問題

3.合併子問題的解

e.快排是軟體工業中最常見的常規排序法,其雙向指標掃瞄分割槽演算法是核心,

往往用於解決類似問題,特別地partition演算法用來劃分不同性質的元素,

partition->selectk,也用於著名的top問題

o(nlgn),但是如果主元不是中位數的話,特別地如果每次主元都在陣列區間的一側,複雜度將退化為n²

工業優化:三點取中法,絕對中值法,小資料量用插入排序

快排重視子問題拆分

f.歸併排序,空間換時間——逆序對數

歸併重視子問題的解的合併

g.堆排序,用到了二叉堆資料結構,是繼續掌握樹結構的起手式

=插排+二分查詢

上面三個都是nlgn的複雜度,其中快排表現最好,是原址的不用開闢輔助空間;堆排也是原址的,但是常數因子較大,不具備優勢。

上面7種都是基於比較的排序,可證明它們在元素隨機順序情況下最好是nlgn的,用決策樹證明

下面三個是非比較排序,在特定情況下會比基於比較的排序要快:

1.計數排序,可以說是最快的:o(n+k),k=maxof(sourcearr),

用它來解決問題時必須注意如果序列中的值分布非常廣(最大值很大,元素分布很稀疏),

空間將會浪費很多

所以計數排序的適用範圍是:序列的關鍵字比較集中,已知邊界,且邊界較小

2.桶排序:先分桶,再用其他排序方法對桶內元素排序,按桶的編號依次檢出。(分配-收集)

用它解決問題必須注意序列的值是否均勻地分布在桶中。

如果不均勻,那麼個別桶中的元素會遠多於其他桶,桶內排序用比較排序,極端情況下,全部元素在乙個桶內

還是會退化成nlgn

其時間複雜度是:時間複雜度: o(n+c),其中c=n*(logn-logm),約等於n*lgn

n是元素個數,m是桶的個數。

3.基數排序,kn級別(k是最大數的位數)是整數數值型排序裡面又快又穩的,無論元素分布如何,

只開闢固定的輔助空間(10個桶)

對比桶排序,基數排序每次需要的桶的數量並不多。而且基數排序幾乎不需要任何「比較」操作,而桶排序在桶相對較少的情況下,

桶內多個資料必須進行基於比較操作的排序。

因此,在實際應用中,對十進位制整數來說,基數排序更好用。

期望水準:

1、準確描述演算法過程

2、寫出偽**

3、能分析時間複雜度

4、能靈活應用(知道優缺點和應用場景)

十大演算法排序總結

b.選擇排序,效率較低,但經常用它內部的迴圈方式來找最大值和最小值 怎麼一次性求出陣列的最大值和最小值 o n c.插排,雖然平均效率低,但是在序列基本有序時,它很快,所以也有其適用範圍 arrays這個工具類在1.7裡面做了較大改動 d.希爾 縮小增量排序 是插排的改良,對空間思維訓練有幫助 分治...

十大演算法解析

一 什麼是演算法?演算法就是任何明確定義的計算過程,它接收一些值或集合作為輸入,並產生一些值或集合作為輸出。這樣,演算法就是將輸入轉換為輸出的一系列計算過程。thomas h.cormen,chales e.leiserson 2009 演算法導論第三版 二 有效的演算法應該含有三個重要特性 1.演...

十大濾波演算法

10大經典濾波演算法,已在網上有很多 的。這些演算法可以說是圍繞 去除突發訊號,取中間訊號,對採集的多個訊號求平均或者根據其特性對其加權求得。這10種基本是在基礎的限幅,求平均,加權的基礎上組合得來。個人覺得,使用的時候,需具體看所採集的訊號特性,來選擇使用濾波方式,也可自己組合出新的濾波演算法。十...