【算法】快速排序与归并排序对比
算法 系列博客
【算法】刷題范圍建議 和 代碼規范
【算法】復雜度理論 ( 時間復雜度 )
【字符串】最長回文子串 ( 蠻力算法 )
【字符串】最長回文子串 ( 中心線枚舉算法 )
【字符串】最長回文子串 ( 動態規劃算法 ) ★
【字符串】字符串查找 ( 蠻力算法 )
【字符串】字符串查找 ( Rabin-Karp 算法 )
【算法】雙指針算法 ( 雙指針算法分類 | 相向雙指針 | 有效回文串 )
【算法】雙指針算法 ( 有效回文串 II )
【算法】哈希表 ( 兩數之和 )
【算法】快速排序
【算法】歸并排序
【算法】快速排序與歸并排序對比
文章目錄
- 算法 系列博客
- 一、時間復雜度
- 二、空間復雜度
- 三、排序穩定性
- 三、局部有序與整體有序
一、時間復雜度
快速排序 ( Quick Sort ) 與 歸并排序 ( Merge Sort ) 的時間復雜度都是 O(nlog?n)O(n \log n)O(nlogn) ;
快速排序 的 平均時間復雜度 是 O(nlog?n)O(n \log n)O(nlogn) , 該時間復雜度是一個期望值 , 快速排序在 最壞情況下會達到 O(n2)O(n^2)O(n2) ;
如 : 數組 [1,2,3] 排序 , 有 6 種排列方式 , 計算這 6 種排序時間復雜度的平均期望就是 O(nlog?n)O(n \log n)O(nlogn) ;
最壞的情況時 [1,2,3] 排列情況 , 時間復雜度 O(n2)O(n^2)O(n2) ;
歸并排序 的 最好情況下的時間復雜度 和 最壞情況下的時間復雜度 都是 O(nlog?n)O(n \log n)O(nlogn) ;
從時間復雜度來講 , 歸并排序 的穩定性 要比 快速排序 高 , 二者時間復雜度相當 ;
二、空間復雜度
從空間復雜度來講 , 歸并排序 的空間復雜度是 O(n)O(n)O(n) , 快速排序 的空間復雜度是 O(1)O(1)O(1) , 快速排序沒有使用額外的空間 , 在數組原地進行排序 ,
三、排序穩定性
排序的穩定性 : 假如數組中有兩個相同的元素 , 給這兩個相同的元素分別打上標記 , 如果每次排列得到的元素順序都是相同的 , 則說明該排序是穩定的 ;
如 : {2,1,1,2}\{2,1,1,2\}{2,1,1,2} , 中給 222 打上標記 , {2′,1,1,2′′}\{2',1,1,2''\}{2′,1,1,2′′} , 最終排序后是 {1,1,2′,2′′}\{1,1,2', 2''\}{1,1,2′,2′′} 還是 {1,1,2′′,2′}\{1,1,2'', 2'\}{1,1,2′′,2′} ;
快速排序中 , 這兩個結果隨機出現 , 同樣使用快速排序 , 并不能保證得到的是相同的標記元素次序 ;
歸并排序 , 可以保證 , 每次排序 , 得到的都是相同的結果 ;
三、局部有序與整體有序
快速排序 與 歸并排序 , 都是將數組分為兩個部分 , 然后兩部分再次進行遞歸 ;
快速排序 隨便選擇了一個數組元素 p 作為中心點 , 將小于等于 p 的元素放在左邊 , 將大于等于 p 的元素放在了右邊 , 分割完畢后 , 左側的元素肯定小于右側的元素 ;
然后對左側 和 右側 再次分別選擇一個元素 m , n , 進行分割 , 分為 4 份 ,
在 4 份的基礎上 , 再次進行分割 , 分為 8 份 , 遞歸調用該快速排序算法 , 直到所有的元素有序為止 ;
快速排序 是 先整體有序 , 然后局部有序 ;
歸并排序 先根據中心點分成兩部分 , 左側和右側分別進行排序 , 兩遍都排序完畢后 , 再組合到一起 ;
歸并排序 是 先局部有序 , 然后整體有序 ;
總結
以上是生活随笔為你收集整理的【算法】快速排序与归并排序对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【错误记录】Android Studio
- 下一篇: 【算法】快速选择算法 ( 数组中找第 K