拜託,面試別再問我時間複雜度了!!!

2021-09-20 01:43:50 字數 1160 閱讀 3715

分為這麼幾步:

,先做一次partition;

●  ,左半區遞迴;

,右半區遞迴;

partition

(arr, low, high);

quick_sort

(arr, low, i-1);

quick_sort

(arr, i+1, high);

:通過了乙個中間變數t,進行了3次操作,交換了a和b的值,swap的時間複雜度是o(1)。

:通過乙個for迴圈,將資料集遍歷,每次遍歷,都只執行「有限次操作」,計算的總次數,和輸入資料量n呈線性關係

:樹的總節點個數是n,則樹的高度是lg(n)。

o(lg(n))。

o(lg(n))。

組合規則的時間複雜度。

:氣泡排序,可以看成三個規則的組合:

o(n^2)

::可以看成三個規則的組合:

o(n*lg(k))

遞迴式,來分析遞迴演算法

時間複雜度。

,很容易知道:

●  

●  

: :

f(n)來表示資料量為n時,演算法的計算次數

,很容易知道:

●  

或者右側的遞迴,以減少一半的資料量:

●  

m個等式

,左側和右側分別相加:

得到

f(n)來表示資料量為n時,演算法的計算次數

,很容易知道:

●  

m個等式

,逐步帶入

,於是得到:

得到:

的時間複雜度往往是

o(n)

的時間複雜度往往是

o(lg(n))

的時間複雜度是

o(lg(n))

快速排序的時間複雜度n

*(lg(n))

,未來再問時間複雜度,通殺

比結論重要。

原文發布時間為:2018-10-8

」。

拜託,面試別再問我跳表了!

跳表是乙個隨機化的資料結構,實質就是一種可以進行二分查詢的有序鍊錶。跳表在原有的有序鍊錶上面增加了多級索引,通過索引來實現快速查詢。跳表不僅能提高搜尋效能,同時也可以提高插入和刪除操作的效能。考慮乙個有序鍊錶,我們要查詢3 7 17這幾個元素,我們只能從頭開始遍歷鍊錶,直到查詢到元素為止。上述這個鍊...

拜託,面試別再問我TopK了!!!

除非校招,我在面試過程中從不問topk這個問題,預設大家都知道。將n個數排序之後,取出最大的k個 即為所得。sort arr,1,n return arr 1,k o n lg n 明明只需要topk,卻將全域性都排序了,這也是這個方法複雜度非常高的原因。那能不能不全域性排序,而只區域性排序呢?這就...

拜託,面試別再問我計數排序了!!!

radix sort 還有計數排序 counting sort 今天,1分鐘,通過幾幅圖,爭取讓大家搞懂計數排序。空間大小為o max min 用來儲存所有元素出現次數 計數 掃瞄待排序資料 arr n 使用計數陣列 counting max min 對每乙個 arr n 現的元素進行計數 掃瞄計數...