高速分揀(1)的基本演算法

2021-09-07 01:28:35 字數 1304 閱讀 4171

高速排序演算法的效能分析

參考資料

高速排序是一種分治排序演算法。它將陣列劃分為左右兩個部分,然後分別對這兩部分排序。關鍵在劃分的過程中。它將重排陣列,使的下面條件成立:

我們通過劃分完畢排序。然後遞迴的呼叫該方法處理子檔案,每一次劃分都會至少使乙個元素放到它終於的位置上。

void quick_sort(item a, int l, int r)

int partation(item a, int l, int r) //劃分函式             

exch(&a[i], &a[r]); //交換劃分元素到它終於位置

return i;

}

劃分過程是不穩定的,由於每乙個元素都有可能被移到大量和它相等的元素(未經檢測到)的後面。

至今,沒有基於陣列的高速排序時穩定的。

時間複雜度o(

n22)

次比較假設呼叫乙個大小為n的有序檔案,那麼全部的劃分都將退化。程式會呼叫自身n次,每次呼叫降低乙個元素(左側n-1個。右側1個……);

n+(n−1)

+(n−

2)+…

…+2+

1=(n

+1)n

2時間複雜度o(

nlgn

)次比較

假設每次劃分都可以恰好把檔案切割成大小相等的兩部分,即滿足分治法

遞迴樹的深度是lg

n,每層的比較o(

n)t(n

)=2t

(n/2

)+n

上式中最後一項的

f(n)=

n是用於分解問題的代價(次數)

由主定理的情形2,

f(n)=n=

nlog

22lo

g0n所以

t(n)=nl

og22

∗log

1n=n

lgn時間複雜度o(

nlgn

)次比較

直觀來看就是,最好情況和最壞情況每層交替出現

在乙個差的劃分後接乙個好的劃分,下面配圖《演算法導論》p99

1.《演算法:c語言實現》p192

2.《演算法導論》p98

3. 主定理:

最基本的演算法(1) 交換

交換演算法在c c 中有以下幾種實現方式 1.實現交換演算法 include using namespace std intmain 2.做成通用的函式 值傳遞 include using namespace std void swap int a,int b int main void swap ...

1 最基本的演算法 交換

c c 中交換演算法的幾種方式 1 include2 include3 4 using namespace std 5 第二種方法,定義乙個函式 6void swap int x,int y 7 第三種方法,8void swap1 int px,int py 9 第四種方法,巨集定義 10 defi...

高速訊號分析的幾個基本問題

1 為什麼要用訊號的上公升 下降 時延長短來判斷是否為高速訊號?a 訊號越 陡 需要保持訊號完整的頻率分量也就越多 福利葉變換可知 一般數碼訊號保持5倍頻最多,因為取5倍頻已經考慮到了訊號90 的能量 又不同頻率的訊號有不同的傳輸特性,傳輸使用的頻帶越寬傳輸特性越複雜。如,同樣是150m訊號,如果取...