鍊錶快排和時間複雜度分析

2021-07-11 10:47:05 字數 703 閱讀 9913

前端時間去面試,碰到問題,快排的鍊錶實現和時間複雜度分析,非常基礎,但是當時完全沒想到社招面試會涉及到這麼基礎的東西,回答的非常不完美,現在總結,以致後人:

節點定義:

struct node ;

實現:node * part(node *begin, node *end)   

q = q->next;

}   

tmp = p->value;

p->value = begin->value;

begin->value = tmp;

return p;

}void quick_sort(node *begin, node *end)   

if(begin != end)   

}時間複雜度的分析:

因為這個演算法如此經典,大家都能記住時間複雜度nlogn。

那要是分析一下怎麼來的呢,一定要記住,如果你不是應屆生的話,那麼考察你這個問題的時候往往不是為了演算法的本身,而是考察你的問題分析能力。

我的分析是這樣的:

1,第一輪分割:n/2 + n/2

2,第二輪分割:n/4 +n/4 +n/4 +n/4

3,第k輪的分割:n/2**k+...+n/2**k

4,然後就是前三項的求和了,n(1/2+... +1/2**k),k是什麼值呢?2**k = n(為什麼?)

5,計算出來是不是nlogn呢?

快排時間複雜度詳細解釋

1 快速排序遞迴版 def quick sort arr if len arr 2 return arr 這是基線條件 else a arr 0 smaller i for i in arr 1 if i a bigger i for i in arr 1 if i a return quick s...

複雜度分析 時間複雜度分析和空間複雜度分析

其實,只要講到資料結構與演算法,就一定離不開時間 空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。1.時間複雜度分析 對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個 o ...

時間複雜度和空間複雜度分析

演算法是指用來運算元據 解決程式問題的一組方法。對於同乙個問題,使用不同的演算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區別。那麼我們應該如何去衡量不同演算法之間的優劣呢?主要還是從演算法所占用的 時間 和 空間 兩個維度去考量。接下來主要介紹時間複雜度和空間複雜度的計算...