常見排序演算法時間複雜度及穩定性
排序演算法 | 平均時間複雜度 | 最壞時間複雜度 | 穩定性 |
---|---|---|---|
選擇排序 | O(N²) | O(N²) | 不穩定 |
氣泡排序 | O(N²) | O(N²) | 穩定 |
插入排序 | O(N²) | O(N²) | 穩定 |
希爾排序 | O(n^(1.3—2)) | O(N²) | 不穩定 |
堆排序 | O(nlogn) | O(nlogn) | 不穩定 |
歸併排序 | O(nlogn) | O(nlogn) | 穩定 |
快速排序 | O(nlogn) | O(N²) | 不穩定 |
基數排序 | O(N*M) | O(N*M) | 穩定 |
排序的穩定性:待排序的序列中有兩個元素相等,排序之後它們的先後順序不變。
具體程式碼在:排序程式碼
相關推薦
常見排序演算法時間複雜度及穩定性
排序演算法 平均時間複雜度 最壞時間複雜度 穩定性 選擇排序 O(N²) O(N²) 不穩定 氣泡排序 O(N²
常見排序演算法時間複雜度、空間複雜度、穩定性總結
排序演算法分類 排序演算法比較表格 排序演算法 平均時間複雜度 最壞時間複雜度 空間複雜度 是否穩定 氣泡排序 O(n2) O(n2) O(1) 是 選擇排序 O(n2) O(n2) O
各種排序演算法時間複雜度、穩定性、初始序列是否對元素比較次數有關
怎麼記憶穩定性: 總過四大類排序:插入、選擇、交換、歸併(基數排序暫且不算) 比較高階一點的(時間複雜度低一點得)shell排序,堆排序,快速排序(除了歸併排序)都是不穩定的,在加上低一級的選擇排序是不穩定的。 比較低階一點的(時間複雜度高一點的)插入排序,
常見排序演算法時間複雜度和空間複雜度表
歸併排序空間複雜度為O(n) 快速排序空間複雜度為O(logn~n):因為快速排序是遞迴的,需要一個棧存放相應的資料,最大遞迴呼叫次數與遞迴樹的深度有關 堆排序空間複雜度在非遞迴情況下是O(1),遞迴情況下就是O(logn)
(最全)資料結構各排序演算法時間複雜度,空間複雜度,穩定性比較
演算法 時間複雜度 最好 ---------- 平均 --------- 最壞 直接插入排序 o(n)-------- o(n的平方) ---------
堆排序優化與幾個排序演算法時間複雜度
我們通常所說的堆是指二叉堆,二叉堆又稱完全二叉樹或者叫近似完全二叉樹。二叉堆又分為最大堆和最小堆。 堆排序(Heapsort)是指利用堆這種資料結構所設計的一種排序演算法,它是選擇排序的一種。可以利用陣列的特點快速定位指定索引的元素。陣列可以根據索引直接獲取元素,時間複雜度為O(1),也就是常量,因此對於取
並行排序演算法——時間複雜度O(n)的排序法
最近老師講了並行的排序演算法,讓我對這個原來不是很瞭解的排序演算法產生了濃厚的興趣。並行排序方法,是指採用平行計算的方法對一組資料進行排序,理論上是在類似內排序的環境下,採用多核並行的方法讓時間降低,排序的複雜度最好的情況下能降低至O(n)左右。 排序的實質
第一篇部落格:對插入排序和歸併排序演算法時間複雜度的學習
第一次寫部落格,心情難免有點忐忑,不過為了達到心中的小目標,儘可能的用有效率的方法去提升自己。廢話不多說,下面進入正題。 剛看了網易公開課裡的《麻省理工學院公開課:演算法導論》,受益頗深!國外學校的講課方式確實更有趣味和深度(或許因為在學校壓根沒聽進去過幾節課)
資料結構和演算法分析之排序篇--歸併排序(Merge Sort)和常用排序演算法時間複雜度比較(附贈記憶方法)
歸併排序的基本思想 歸併排序法是將兩個或以上的有序表合併成一個新的有序表,即把待排序序列分成若干個子序列,每個子序列是有序的。然後再把有序子序列合併為整體有序序列。注意:一定要是有序序列! 歸併排序例項: 合併方法: 設r[i……n]由兩個有序子表r
【PHP-排序演算法】快速排序、堆排序演算法時間複雜度比較
介紹 在以往工作或者面試的時候常會碰到一個問題,如何實現海量TopN,就是在一個非常大的結果集裡面快速找到最大的前10或前100個數,同時要保證記憶體和速度的效率,我們可能第一個想法就是利用排序,然後擷取前10或前100,而排序對於量不是特別大的時候沒有任何問題,但只要
常用的八大排序演算法時間複雜度和空間複雜度比較
排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。 各種內部排序按所採用的
排序演算法--時間複雜度(平均時間,最壞情況)、空間複雜度
1、時間複雜度:一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式f(n),演算法的時間量度記作:
常用排序演算法時間複雜度和空間複雜度
摘自維基百科: http://zh.wikipedia.org/wiki/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95#.E7.A8.B3.E5.AE.9A.E6.80.A7 在電腦科學所使用的排序演算法通常被分類為: 計算的時間複雜度(最
演算法導論學習之快排+各種排序演算法時間複雜度總結
快排是一種最常用的排序演算法,因為其平均的時間複雜度是nlgn,並且其中的常數因子比較小。 一.快速排序 快排和合並排序一樣都是基於分治的排序演算法;快排的分治如下: 分解:對區間A[p,r]進行分解,返回q,使得A[p–q-1]都不大
排序演算法的複雜度和穩定性
本文簡單介紹幾種面試中常用的排序演算法,並對每個演算法的時間複雜度、空間複雜度、穩定性進行分析。 (1) 氣泡排序 void swap(int& num1, int& num2) { num1 = num1 ^ num2; num2 = num2 ^ n
氣泡排序演算法、時間複雜度和穩定性
氣泡排序 氣泡排序一般是我們學習排序演算法時第一個接觸的演算法,下面來介紹一下氣泡排序。 演算法原理 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一步,最後的元素應該會是最大
插入排序演算法、時間複雜度和穩定性
插入排序 演算法原理 將資料分為有序部分和無序部分。 在無序部分選擇一個元素,按照順序插入到有序部分,使之有序。 直到無序部分都插入到有序部分結束。 演算法分析 排序的思想就是維護一個有序的部分,將無序部分的資料按照順序插入到有序部分。 通
C++的STL庫,vector sort排序時間複雜度 及常見容器比較
http://www.cnblogs.com/sthv/p/5511921.html http://www.169it.com/article/3215620760.html http://www.cnblogs.com/sharpfeng/archi
資料結構與演算法--蠻力法之氣泡排序與時間複雜度分析(java)
蠻力法 蠻力法又稱窮舉法和列舉法,是一種簡單直接地解決問題的方法,常常直接基於問題的描述,所以蠻力法也是最容易應用的方法。但是蠻力法所設計的演算法時間特性往往是比較低的,典型的指數時間演算法一般都是通過蠻力
排序演算法之 插入排序、希爾(shell)排序 及其時間複雜度和空間複雜度
有一個已經有序的資料序列,要求在這個已經排好的資料序列中插入一個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法——插入排序插入排序的基本操作就是將一個數據插入到已經排好序的有序資料中,從而得到一個新的、個數加一的有序資料,演算法適用於少