快速排序時間復雜度為什麼n2
Ⅰ 什麼排序的速度(時間復雜度)最快
從時間復雜度看,所有內部排序方法可以分為兩類。
1.插入排序 選擇排序 起泡排序
其時間復雜度為O(n2);
2.堆排序 快速排序 歸並排序
其時間復雜度為O(nlog2n)。
這是就平均情況而言的,如果從最好的情況考慮,
則插入排序和起泡排序的時間復雜度最好,為O(n),
而其他演算法的最好情況同平均情況大致相同。
如果從最壞的情況考慮,快速排序的時間復雜度為O(n2),插入排序和起泡排序雖然同平均情況相同,但系數大約增加一倍,運行速度降低一半,而選擇排序、堆排序和歸並排序則影響不大。
總之,
在平均情況下,快速排序最快;
在最好情況下,插入排序和起泡排序最快;
在最壞情況下,堆排序和歸並排序最快。
Ⅱ 嵌入式開發者都了解的10大演算法
演算法一:快速排序法
快速排序是一種由東尼·霍爾發明的排序演算法,平均情況下需Ο(n log n)次比較完成。最壞情況下,快速排序需Ο(n2)次比較,但這種情況不常見。演算法效率高,內部循環可在多種架構上高效實現。快速排序採用分治法策略將一個序列分為兩個子序列。
演算法步驟:從序列中選擇一個元素作為基準,重新排序序列,將所有比基準小的元素放在基準前面,所有比基準大的元素放在基準後面。遞歸地對兩個子序列排序,直到序列排序完成。
演算法二:堆排序演算法
堆排序是利用堆數據結構實現的排序演算法,平均時間復雜度為Ο(nlogn)。堆是一個近似完全二叉樹的結構,每個結點的鍵值或索引小於(或大於)其子節點。
演算法步驟:創建一個堆,將堆首的最大值與堆尾元素交換,將堆的尺寸減小1並調整堆頂元素,重復步驟直到堆尺寸為1。
演算法三:歸並排序
歸並排序採用分治法策略,通過遞歸地將序列分割為更小的部分,然後合並排序後的子序列以得到最終排序序列。
演算法步驟:申請空間存放合並後的序列,設定兩個指針分別指向兩個已排序序列的起始位置,比較指針所指元素,將較小元素放入合並序列並移動指針,重復直至序列遍歷完成,將剩餘元素復制到合並序列。
演算法四:二分查找演算法
二分查找演算法在有序數組中高效查找特定元素。通過比較中間元素與目標元素,縮小搜索范圍,時間復雜度為Ο(logn)。
演算法五:BFPRT(線性查找)
BFPRT演算法通過分組、選取中位數、遞歸查找最終中位數來解決查找第k大元素問題,時間復雜度為Ο(n)。
演算法步驟:將元素每5個一組,找出每組中位數,遞歸查找所有中位數的中位數,調整數組以分割,並在合適位置查找第k大元素。
演算法六:深度優先搜索(DFS)
深度優先搜索演算法遍歷圖的深度,從源節點出發,盡可能深地搜索樹的分支,回溯至先前訪問的節點,直到所有節點被訪問。
演算法步驟:訪問頂點,遞歸地訪問其未訪問的鄰接頂點,直至所有連通的頂點都被訪問。
演算法七:廣度優先搜索(BFS)
廣度優先搜索演算法從根節點出發,遍歷樹的寬度,直到所有節點被訪問。
演算法步驟:首先將根節點放入隊列,從隊列中取出節點,檢查是否為目標,若不是,將其鄰接節點加入隊列,隊列為空時結束搜索。
演算法八:迪科斯徹演算法(Dijkstra)
迪科斯徹演算法解決有向圖的單源最短路徑問題,構建最短路徑樹。
演算法步驟:初始化,選擇距離最小未訪問節點加入路徑,更新相鄰節點距離,重復直至所有節點加入路徑。
演算法九:動態規劃演算法
動態規劃解決復雜問題,通過分解子問題求解,避免重復計算,利用記憶化存儲子問題解。
演算法步驟:識別最優子結構,解決子問題,存儲結果,合並子問題解以得到原問題解。
演算法十:樸素貝葉斯分類演算法
樸素貝葉斯分類器基於貝葉斯定理,假設特徵之間獨立,通過概率模型進行分類,適用於監督學習。