各種常用排序演算法的時間複雜度和空間複雜度

2021-08-21 20:21:03 字數 1672 閱讀 1040

一、常用排序演算法的時間複雜度和空間複雜度**

二、特點

1.歸併排序:

(1)n大時好,歸併比較占用記憶體,記憶體隨n的增大而增大,但卻是效率高且穩定的排序演算法。

(2)歸併排序每次遞迴都要用到乙個輔助表,長度與待排序的表長度相同,雖然遞迴次數是o(log2n),但每次遞迴都會釋放掉所佔的輔助空間

(3)雖然插入排序的時間複雜度為o(n2),歸併排序的時間複雜度為o(nlog2n),但插入排序中的常數因子使得它在n較小時,執行更快一些。因此,在歸併排序演算法中,當子問題足夠小時,採用插入排序演算法就比較合適

(4)以時間換空間:網上很多blog分享空間複雜度只有o(1)的歸併排序法;因為傳統的歸併排序所消耗的空間主要是在歸併函式(把兩個有序的函式合併成乙個有序的函式),所以如果要讓時間複雜度為o(1),那麼也只能在歸併函式中做文章了。其主要思想就是借助於快速排序(其實就是相當於歸併函式被快速排序函式替換了),這樣的方法雖然可以減少記憶體的消耗,但是卻會在時間上帶來損失,因為這樣時間複雜度卻變成了o(n2)了;所以這種方法並不是乙個兩全其美的idea。

2.氣泡排序

(1)氣泡排序是一種用時間換空間的排序方法,n小時好

(2)最壞情況是把順序的排列變成逆序,或者把逆序的數列變成順序,最差時間複雜度o(n2)只是表示其操作次數的數量級

(3)最好的情況是資料本來就有序,複雜度為o(n)

3.快速排序

(1)n大時好,快速排序比較占用記憶體,記憶體隨n的增大而增大,但卻是效率高不穩定的排序演算法。

(2)劃分之後一邊是乙個,一邊是n-1個,這種極端情況的時間複雜度就是o(n2)

(3)最好的情況是每次都能均勻的劃分序列,o(nlog2n)

(4)快速排序空間複雜度只是在通常情況下才為o(log2n),如果是最壞情況的話,很顯然就要o(n)的空間了。當然,可以通過隨機化選擇pivot來將空間複雜度降低到o(log2n)。

三、相關概念1、時間複雜度

時間複雜度可以認為是對排序資料的總的操作次數。反映當n變化時,操作次數呈現什麼規律。

常見的時間複雜度有:常數階o(1),對數階o(log2n),線性階o(n),線性對數階o(nlog2n),平方階o(n2)

時間複雜度o(1):演算法中語句執行次數為乙個常數,則時間複雜度為o(1)

2、空間複雜度

空間複雜度是指演算法在計算機內執行時所需儲存空間的度量,它也是問題規模n的函式

空間複雜度o(1):當乙個演算法的空間複雜度為乙個常量,即不隨被處理資料量n的大小而改變時,可表示為o(1)

空間複雜度o(log2n):當乙個演算法的空間複雜度與以2為底的n的對數成正比時,可表示為o(log2n)         

空間複雜度o(n):當乙個演算法的空間複雜度與n成線性比例關係時,可表示為o(n).

各種排序演算法時間複雜度

各種排序演算法比較 各種常用排序演算法 類別排序方法 時間複雜度 空間複雜度 穩定性複雜性 特點最好 平均最壞 輔助儲存 簡單插入 排序直接插入 o n o n2 o n2 o 1 穩定簡單 希爾排序 o n o n1.3 o n2 o 1 不穩定複雜 選擇排序 直接選擇 o n o n2 o n2...

各種排序演算法的時間複雜度

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

各種排序演算法的時間複雜度

當我們評價乙個演算法的時間效能時,主要標準就是演算法的漸近時間複雜度,在演算法分析時,經常是將漸近時間複雜度t n o f n 簡稱為時間複雜度,其中的f n 一般是演算法中頻度最大的語句頻度。演算法中語句的頻度不僅與問題規模有關,還與輸入例項中各元素的取值相關。但是我們總是考慮在最壞的情況下的時間...