经典排序算法及复杂度分析(更新中)

经典排序算法及复杂度分析(更新中)

  • 复杂度回顾
  • 冒泡、归并排序

本文将总结几种经典排序算法的思路及其复杂度分析,包括冒泡排序、归并排序、快速排序、堆排序等。

复杂度回顾

O ( g ( n ) ) O(g(n)) O(g(n)),上界 \quad eg. 2 n 2 = O ( n 2 ) 2n^{2}=O(n^{2}) 2n2=O(n2)
Ω ( g ( n ) ) \Omega(g(n)) Ω(g(n)) ,下界 \quad eg. n = Ω ( l g n ) \sqrt{n}=\Omega(lgn) n =Ω(lgn)
Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n)) ,紧致界, Θ ( g ( n ) ) = O ( g ( n ) ) ∧ Ω ( g ( n ) ) \Theta(g(n))=O(g(n))\wedge\Omega(g(n)) Θ(g(n))=O(g(n))Ω(g(n)) \quad eg. 1 2 n 2 − 2 n = Θ ( n 2 ) \frac{1}{2}{n^{2}}-2n=\Theta (n^{2}) 21n22n=Θ(n2)

复杂度求解之“主方法” (Master Method),常用在递归问题的复杂度求解上。
方法:当问题复杂度可以写成表达式 T ( n ) = a T ( n / b ) + f ( n ) T(n)=aT(n/b)+f(n) T(n)=aT(n/b)+f(n)时,计算 O ( n l o g b a ) O(n^{log_{b}^{a}}) O(nlogba),与 f ( n ) f(n) f(n)比较,以复杂度大的那一项为准。
case1: f ( n ) f(n) f(n) n l o g b a n^{log_{b}^{a}} nlogba增长要慢, T ( n ) = Θ ( n l o g b a ) T(n)=\Theta (n^{log_{b}^{a}}) T(n)=Θ(nlogba)
case2: f ( n ) f(n) f(n) n l o g b a n^{log_{b}^{a}} nlogba增长速度相同, T ( n ) = Θ ( n l o g b a l g n ) T(n)=\Theta (n^{log_{b}^{a}}lgn) T(n)=Θ(nlogbalgn)
case3: f ( n ) f(n) f(n) n l o g b a n^{log_{b}^{a}} nlogba增长要快, T ( n ) = Θ ( f ( n ) ) T(n)=\Theta (f(n)) T(n)=Θ(f(n))

冒泡、归并排序

  • 冒泡排序 \quad eg. T ( n ) = Θ ( n 2 ) T(n)=\Theta (n^{2}) T(n)=Θ(n2)
  • 归并排序 merge sort \quad eg. T ( n ) = Θ ( n l g n ) T(n)=\Theta (nlgn) T(n)=Θ(nlgn)

你可能感兴趣的:(算法,复杂度分析,算法,复杂度)