常用排序演算法的總結和對比

2021-10-04 04:57:48 字數 2405 閱讀 4507

演算法是滿足輸入,輸出,確定性,有限性,正確性(/可行性)等性質的指令序列

演算法是用來設計並實現一種用計算機來解決問題的方法

3.1.1.度量乙個程式(演算法)執行時間的兩種方法

3.1.1.1.事後統計的方法

在演算法(/程式)中新增加乙個計時器,讓演算法(/程式)在電腦上先執行一次,可以知道演算法的執行時間,這種方法可行,但是有兩個問題:

3.1.1.2.事前估算的方法

通過分析某個演算法的時間複雜度來判斷哪個演算法更優;

3.1.2.時間頻度

1>.乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多.乙個演算法中的語句執行次數稱為語句頻度或時間頻度,記為t(n);

2>.時間頻度t(n)舉例說明

①.常數項可以忽略

例如:2n+20,2n,3n+10,3n;

因為常數項是固定不變的,對整個結果起不到關鍵性作用,所以我們只要比較前面係數項即可(2n,3n);

②.低次項可以忽略

例如:2n2+3n+10,2n2,n2+5n+20,n2;

因為低次項和常數項是對整個結果影響並不大,所以我們只要比較前面最高次項即可(n2,2n2);

③.係數可以忽略

例如: 3n2+2n,5n2+7n,n3+5n,6n3+4n;

因為低次項和係數(變數前面數字)是對整個結果影響並不大,所以我們只要比較次數最高的項即可(n3,n2);

3.1.3.時間複雜度

1>.一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),當n趨近於無窮大時,t(n)/f(n)的極限值為不等於0的常數,則稱f(n)是t(n)的同數量級函式,記作t(n)=o(f(n)),稱o(f(n))為演算法的漸進時間複雜度,簡稱時間複雜度;

2>.t(n)不同,但時間複雜度可能相同.如:t(n)=n2+7n+6 與 t(n)=3n2+2n+2,它們的t(n)不同,但時間複雜度相同,都為o(n2);

3>.計算時間複雜度的方法

①.用常數1代替執行時間中的所有加法常數,如t(n)=n2+7n+6 => t(n)=n2+7n+1;

②.修改後的執行次數函式中,只保留最高端項,如t(n)=n2+7n+1 => t(n) = n2;

③.去除最高端項的係數,如t(n) = n2 => t(n) = n2 => o(n2);

3.1.4.常見時間複雜度

注意:常見的演算法時間複雜度由小到大依次為:o(1) < o(log2n) < o(n) < o(nlog2n) < o(n2) < o(n3) < o(nk) < o(2n)隨著問題規模n的不斷擴大,上述時間複雜度不斷增大,演算法的執行效率越低;我們應該盡量避免使用指數階的演算法!

3.1.5.平均時間複雜度和最壞時間複雜度

①.平均時間複雜度是指所有可能的輸入例項均以等概率出現的情況下,該演算法的執行時間;

②.最壞情況下的時間複雜度稱最壞時間複雜度.一般討論的時間複雜度均是最壞情況下的時間複雜度.這樣做的原因是:最壞情況下的時間複雜度是演算法在任何輸入例項上執行時間的界限,這就保證了演算法的執行時間不會比最壞情況更長;

1>.類似於時間複雜度的討論,乙個演算法的空間複雜度(space complexity)定義為該演算法所耗費的儲存空間,它也是問題規模n的函式;

2>.空間複雜度(space complexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度.有的演算法需要占用的臨時工作單元數與解決問題的規模n有關,它隨著n的增大而增大,當n較大時,將占用較多的儲存單元,例如快速排序和歸併排序演算法,基數排序就屬於這種情況;

3>.在做演算法分析時,主要討論的是時間複雜度.從使用者使用體驗上看,更看重的程式執行的速度.一些快取產品(redis, memcache)和演算法(基數排序)本質就是用空間換時間;

常用排序演算法對比

排序方法 時間複雜度 平均 時間複雜度 最壞 時間複雜度 最好 空間複雜度 穩定性 比較次數 最壞 比較次數 最好 氣泡排序 o n2 o n2 o n o 1 穩定n n 1 2 n 1選擇排序 o n2 o n2 o n2 o 1 不穩定n n 1 2 插入排序 o n2 o n2 o n o ...

排序演算法總結對比

常用排序演算法分析 void swap int x,int y 氣泡排序 時間複雜度為o n 2 兩兩比較,交換,每次內層迴圈在未排序序列中找出最大值放到已排序中 對於部分有序的序列來說,效率較高 穩定 void bubble sort int arr,int start,int end if po...

排序演算法總結對比

0.十大經典排序演算法 1.排序演算法分類 非線性時間比較類排序 通過比較來決定元素間的相對次序,由於其時間複雜度不能突破o nlogn 因此稱為非線性時間比較類排序。線性時間非比較類排序 不通過比較來決定元素間的相對次序,它可以突破基於比較排序的時間下界,以線性時間執行,因此稱為線性時間非比較類排...