『壹』 快速排序的復雜度怎麼算,是多少
這個,我確實一點也不懂,幫你搜索。
1.
快速排序-時空復雜度:
快速排序每次將待排序數組分為兩個部分,在理想狀況下,每一次都將待排序數組劃分成等長兩個部分,則需要logn次劃分。
而在最壞情況下,即數組已經有序或大致有序的情況下,每次劃分只能減少一個元素,快速排序將不幸退化為冒泡排序,所以快速排序時間復雜度下界為O(nlogn),最壞情況為O(n^2)。在實際應用中,快速排序的平均時間復雜度為O(nlogn)。
快速排序在對序列的操作過程中只需花費常數級的空間。空間復雜度S(1)。
但需要注意遞歸棧上需要花費最少logn最多n的空間。
2.快速排序-隨機化演算法:
快速排序的實現需要消耗遞歸棧的空間,而大多數情況下都會通過使用系統遞歸棧來完成遞歸求解。在元素數量較大時,對系統棧的頻繁存取會影響到排序的效率。
一種常見的辦法是設置一個閾值,在每次遞歸求解中,如果元素總數不足這個閾值,則放棄快速排序,調用一個簡單的排序過程完成該子序列的排序。這樣的方法減少了對系統遞歸棧的頻繁存取,節省了時間的消費。
一般的經驗表明,閾值取一個較小的值,排序演算法採用選擇、插入等緊湊、簡潔的排序。一個可以參考的具體方案:閾值T=10,排序演算法用選擇排序。
閾值不要太大,否則省下的存取系統棧的時間,將會被簡單排序演算法較多的時間花費所抵消。
另一個可以參考的方法,是自行建棧模擬遞歸過程。但實際經驗表明,收效明顯不如設置閾值。
3.快速排序的最壞情況基於每次劃分對主元的選擇。基本的快速排序選取第一個元素作為主元。這樣在數組已經有序的情況下,每次劃分將得到最壞的結果。一種比較常見的優化方法是隨機化演算法,即隨機選取一個元素作為主元。這種情況下雖然最壞情況仍然是O(n^2),但最壞情況不再依賴於輸入數據,而是由於隨機函數取值不佳。實際上,隨機化快速排序得到理論最壞情況的可能性僅為1/(2^n)。所以隨機化快速排序可以對於絕大多數輸入數據達到O(nlogn)的期望時間復雜度。一位前輩做出了一個精闢的總結:「隨機化快速排序可以滿足一個人一輩子的人品需求。」
隨機化快速排序的唯一缺點在於,一旦輸入數據中有很多的相同數據,隨機化的效果將直接減弱。對於極限情況,即對於n個相同的數排序,隨機化快速排序的時間復雜度將毫無疑問的降低到O(n^2)。解決方法是用一種方法進行掃描,使沒有交換的情況下主元保留在原位置。
4.設要排序的數組是A[0]……A[N-1],首先任意選取一個數據(通常選用第一個數據)作為關鍵數據,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。一趟快速排序的演算法是:
1)設置兩個變數I、J,排序開始的時候:I=0,J=N-1;
2)以第一個數組元素作為關鍵數據,賦值給key,即 key=A[0];
3)從J開始向前搜索,即由後開始向前搜索(J=J-1),找到第一個小於key的值A[J],並與A[I]交換;
4)從I開始向後搜索,即由前開始向後搜索(I=I+1),找到第一個大於key的A[I],與A[J]交換;
5)重復第3、4、5步,直到 I=J; (3,4步是在程序中沒找到時候j=j-1,i=i+1。找到並交換的時候i, j指針位置不變。另外當i=j這過程一定正好是i+或j+完成的最後另循環結束)
例如:待排序的數組A的值分別是:(初始關鍵數據:X=49) 注意關鍵X永遠不變,永遠是和X進行比較,無論在什麼位子,最後的目的就是把X放在中間,小的放前面大的放後面。
A[0] 、 A[1]、 A[2]、 A[3]、 A[4]、 A[5]、 A[6]:
49 38 65 97 76 13 27
進行第一次交換後: 27 38 65 97 76 13 49
( 按照演算法的第三步從後面開始找)
進行第二次交換後: 27 38 49 97 76 13 65
( 按照演算法的第四步從前面開始找>X的值,65>49,兩者交換,此時:I=3 )
進行第三次交換後: 27 38 13 97 76 49 65
( 按照演算法的第五步將又一次執行演算法的第三步從後開始找
進行第四次交換後: 27 38 13 49 76 97 65
( 按照演算法的第四步從前面開始找大於X的值,97>49,兩者交換,此時:I=4,J=6 )
此時再執行第三步的時候就發現I=J,從而結束一趟快速排序,那麼經過一趟快速排序之後的結果是:27 38 13 49 76 97 65,即所以大於49的數全部在49的後面,所以小於49的數全部在49的前面。
快速排序就是遞歸調用此過程——在以49為中點分割這個數據序列,分別對前面一部分和後面一部分進行類似的快速排序,從而完成全部數據序列的快速排序,最
『貳』 快速排序演算法在平均情況下的時間復雜度為 求詳解
時間復雜度為O(nlogn) n為元素個數
1. 快速排序的三個步驟:
1.1. 找到序列中用於劃分序列的元素
1.2. 用元素劃分序列
1.3. 對劃分後的兩個序列重復1,2兩個步驟指導序列無法再劃分
所以對於n個元素其排序時間為
T(n) = 2*T(n/2) + n (表示將長度為n的序列劃分為兩個子序列,每個子序列需要T(n/2)
的時間,而劃分序列需要n的時間)
而 T(1) = 1 (表示長度為1的序列無法劃分子序列,只需要1的時間即可)
T(n) = 2^logn + logn * n (n被不斷二分最終只能二分logn次(最優的情況,每次選取
的元素都均分序列))
= n + nlogn
因此T(n) = O(nlogn)
以上是最優情況的推導,因此快速排序在最優情況下其排序時間為O(nlogn),通常平均情況
我們也認為是此值。
在最壞情況下其會退化為冒泡排序,T(n) = T(n - 1) + n (每次選取的元素只能將序列劃分為
一段,即自身是 最小元素或最大元素)
因此T(n) = n * (n-1) / 2 相當於O(n^2)
『叄』 快速排序復雜度
快速排序的時間性能取決於快速排序遞歸的深度,可以用遞歸樹來描述遞歸演算法的執行情況。
最好情況
如圖9‐9‐7所示,它是{50,10,90,30, 70,40,80,60,20}在快速排序過程中的遞歸過程。由於我們的第一個關鍵字是50,正好是待排序的序列的中間值,因此遞歸樹是平衡的,此時性能也比較好。
由數學歸納法可證明,其數量級為O(nlogn)。
『肆』 快速排序演算法的平均時間復雜度到底是多少有的答案是n
平均復雜度O(nlogn)
『伍』 5. 快速排序在平均情況下的時間復雜度為_______________,在最壞情況下的時 間復雜度為________________。
快速排序時間復雜度下界為O(nlogn),最壞情況為O(n^2)
快速排序的平均時間復雜度為O(nlogn)。
『陸』 快速排序演算法復雜度
快速排序演算法的平均時間復雜度為O(nlogn)
『柒』 快速排序的時間復雜度
快排的平均時間為:T(n) = k*n*lnn
時間復雜度為:O(n*logn)
『捌』 快速排序法的平均時間復雜度是多少
快速排序法的時間復雜度是nlogn(n×log以2為底n的對數)
拓展:
快速排序(Quicksort)是對冒泡排序的一種改進。
快速排序由C. A. R.
Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
附各種排序法的時間復雜度如下:
『玖』 快速排序的時間復雜度是多少
快速排序的平均時間復雜度是O(nlogn),在最壞情況下的時間復雜度退化為O(n2)
『拾』 快速排序演算法在平均情況下的時間復雜度為 求詳解
時間復雜度為O(nlogn)N是多少元素
1。快速排序的三個步驟:
1.1。查找序列用於劃分的序列中的元素
1.2元素劃分的序列
1.3 1,2兩個步驟的過程不斷重復,兩個序列劃分指導序列不能被細分
n個元素的排序條件為T(n)= 2 * T(n / 2個)+ N(表示序列分為兩個子序列中的n的長度,每個子序列需要到T(n / 2個)
時間除以
T(1)= 1(序列的長度不能被劃分為子序列,序列的n個)只需要1罐)
T(N)= 2 ^ LOGN + LOGN * N(n為不斷二分法最後只有兩點:LOGN(最佳,各選擇
平均序列的元素))
= N + nlogn
因此,T(N)= O(nlogn )
以上是派生的理想情況下,快速排序排序在最佳的情況下,時間為O(nlogn)通常平均
我們也相信,這個值。
在最壞的情況下,它會淪為冒泡排序,T(N)= T(n - 1個)+ N(每次選擇元素序列分為
一些,這是他們自己的元素是最小的或最大的元素)
T(N)= N *(N-1)/ 2,相當於為O(N ^ 2)