1. 程式人生 > >各種排序演算法比較:時間複雜度,空間複雜度

各種排序演算法比較:時間複雜度,空間複雜度

時間複雜度

n^2表示n的平方,選擇排序有時叫做直接選擇排序或簡單選擇排序

排序方法 平均時間 最好時間 最壞時間
桶排序(不穩定) O(n) O(n) O(n)
基數排序(穩定) O(n) O(n) O(n)
歸併排序(穩定) O(nlogn) O(nlogn) O(nlogn)
快速排序(不穩定) O(nlogn) O(nlogn) O(n^2)
堆排序(不穩定) O(nlogn) O(nlogn) O(nlogn)
希爾排序(不穩定) O(n^1.25)
氣泡排序(穩定) O(n^2) O(n) O(n^2)
選擇排序(不穩定) O(n^2) O(n^2) O(n^2)
直接插入排序(穩定) O(n^2) O(n) O(n^2)

O(n)這樣的標誌叫做漸近時間複雜度,是個近似值.各種漸近時間複雜度由小到大的順序如下

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

一般時間複雜度到了2^n(指數階)及更大的時間複雜度,這樣的演算法我們基本上不會用了,太不實用了.比如遞迴實現的漢諾塔問題演算法就是O(2^n).

平方階(n^2)的演算法是勉強能用,而nlogn及更小的時間複雜度演算法那就是非常高效的演算法了啊.

空間複雜度

氣泡排序,簡單選擇排序,堆排序,直接插入排序,希爾排序的空間複雜度為O(1),因為需要一個臨時變數來交換元素位置,(另外遍歷序列時自然少不了用一個變數來做索引)

快速排序空間複雜度為logn(因為遞迴呼叫了) ,歸併排序空間複雜是O(n),需要一個大小為n的臨時陣列.

基數排序的空間複雜是O(n),桶排序的空間複雜度不確定

最快的排序演算法是桶排序

所有排序演算法中最快的應該是桶排序(很多人誤以為是快速排序,實際上不是.不過實際應用中快速排序用的多)但桶排序一般用的不多,因為有幾個比較大的缺陷.

1.待排序的元素不能是負數,小數.

2.空間複雜度不確定,要看待排序元素中最大值是多少.

所需要的輔助陣列大小即為最大元素的值.


相關推薦

各種排序演算法比較時間複雜,空間複雜

時間複雜度 n^2表示n的平方,選擇排序有時叫做直接選擇排序或簡單選擇排序 排序方法 平均時間 最好時間 最壞時間 桶排序(不穩定) O(n) O(n) O(n) 基數排序(穩定) O(n) O(n) O(n) 歸併排序(穩定) O(nlogn) O(nlogn) O(nlogn) 快速排序(不穩定)

各種排序演算法詳解&時間空間複雜

排序演算法經過了很長時間的演變,產生了很多種不同的方法。對於初學者來說,對它們進行整理便於理解記憶顯得很重要。每種演算法都有它特定的使用場合,很難通用。因此,我們很有必要對所有常見的排序演算法進行歸納。排序大的分類可以分為兩種:內排序和外排序。在排序過程中,全部記錄存放在記憶體,則稱為內排序,如果排序過程中需

各種排序演算法比較(1):穩定性

前面有講到了9種排序演算法:      (3和4屬於插入排序,有時把改進後的直接插入排序叫做二分插入) 5.氣泡排序         6.快速排序     (5和6屬於交換排序.交換排序顧名思義是不停的交換資料位置.但實際上選擇排序也在不停的交換元素,但次數較少,只有

各種排序演算法比較

1.穩定性比較 插入排序、氣泡排序、二叉樹排序、二路歸併排序及其他線形排序是穩定的 選擇排序、希爾排序、快速排序、堆排序是不穩定的 2.時間複雜性比較    平均情況  最好情況 最壞情況 歸併排序 O(nlogn)  O(nlogn) O(nlogn) 基數排序 O(

各種排序演算法比較(java)

排序演算法是資料結構中十分基礎的內容,本文總結了常用的排序演算法的原理和效能,還給出了相關的圖解,並且採用java語言實現了演算法,最後給了一個面試中實際的例子,以及演算法複雜度的比較 1、選擇排序 最基本的排序演算法,原理看圖就可以理解: //

各種排序演算法時間複雜、穩定性、初始序列是否對元素比較次數有關

怎麼記憶穩定性: 總過四大類排序:插入、選擇、交換、歸併(基數排序暫且不算) 比較高階一點的(時間複雜度低一點得)shell排序,堆排序,快速排序(除了歸併排序)都是不穩定的,在加上低一級的選擇排序是不穩定的。 比較低階一點的(時間複雜度高一點的)插入排序,      

各種排序演算法時間複雜

選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法, 氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。 排序演算法不穩定的含義是:在排序之前,有兩個數相等. 但是在排序結束之後,它們兩個有可能改變順序. 比如說:  在一個待排序佇列中,A和B相等,且A排在

各種排序演算法複雜比較

寫在前面 筆試題目當中會出現各種排序演算法的比較,分為最好,最壞,平均情況的複雜度比較,在這裡總結一下。 主要內容 最好情況 一般會這麼問:在各自最優條件下以下演算法複雜度最低的是 看清題目的要求是問在最優的條件下,所以插入排序

08各種排序演算法複雜比較

各種排序演算法比較  各種常用排序演算法 類別 排序方法 時間複雜度 空間複雜度 穩定性 複雜性 特點

演算法導論學習之快排+各種排序演算法時間複雜總結

快排是一種最常用的排序演算法,因為其平均的時間複雜度是nlgn,並且其中的常數因子比較小。 一.快速排序 快排和合並排序一樣都是基於分治的排序演算法;快排的分治如下: 分解:對區間A[p,r]進行分解,返回q,使得A[p–q-1]都不大

常用排序演算法中的時間複雜空間複雜

排序法 最差時間分析 平均時間複雜度 穩定度 空間複雜度 氣泡排序 O(n2) O(n2) 穩定 O(1) 快速排序 O(n2) O(n*log2n) 不穩定 O(log2n)~O(n) 選擇排序 O(n2) O(n2) 不穩定

常用排序演算法穩定性、時間複雜分析

1、  選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法,        氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。 2、研究排序演算法的穩定性有何意義?   首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前兩個相等的資

淺談直接插入排序演算法思想以及時間複雜分析

研究意義 直接插入排序是最基本的一種排序演算法,其思想簡單,容易掌握,對後期的學習也有一定的幫助。 必備知識(之後不再敘述) 排序:將一組雜亂無章的資料排列成一個按關鍵字有序的序列。 穩定性:關鍵值相

各種排序演算法及其複雜

穩定的   氣泡排序(bubble sort) — O(n^2)   雞尾酒排序(Cocktail sort,雙向的氣泡排序) — O(n^2)   插入排序(insertion sort)— O(n^2)   桶排序(bucket sort)— O(n); 需要 O

各種排序的穩定性和時間複雜

轉載:http://blog.chinaunix.net/uid-21457204-id-3060260.html 轉載:http://blog.csdn.net/johnny710vip/article/details/6895654 這幾天筆試了好幾次了,連續碰到一個

排序演算法 (穩定性時間複雜分析)

1、  選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法,        氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。 2、研究排序演算法的穩定性有何意義?   首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前兩個相等的資

自己整理的幾種常見排序演算法,及時間複雜空間複雜。c++程式設計

/***************************************************** copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd.  File name: Author:fhb  

有1,2,....一直到n的無序陣列,求排序演算法,要求時間複雜為O(n),空間複雜O(1)

http://blog.csdn.net/dazhong159/article/details/7921527 1、有1,2,....一直到n的無序陣列,求排序演算法,並且要求時間複雜度為O(n),空間複雜度O(1),使用交換,而且一次只能交換兩個數。 #include &

各種排序演算法總結和比較

       排序演算法可以說是一項基本功,解決實際問題中經常遇到,針對實際資料的特點選擇合適的排序演算法可以使程式獲得更高的效率,有時候排序的穩定性還是實際問題中必須考慮的,這篇部落格對常見的排序演算法進行整理,包括:插入排序、選擇排序、氣泡排序、快速排序、堆排序、歸併

資料結構(一)幾種常見排序演算法比較

排序 0. 常見排序演算法效率比較 時間複雜度及穩定性比較 排序方法 平均方法 最優複雜度 最壞複雜度 輔助空間 穩定性 氣泡排序 O(