算法複雜度分爲時間複雜度和空間複雜度。其做用: 時間複雜度時間複雜度是指執行算法所須要的計算工做量;而空間複雜度是指執行這個算法所須要的內存空間。算法的複雜性體運行該算法時的計算機所需資源的多少上,計算機資源最重要的是時間和空間,即寄存器資源,所以複雜度分爲時間和空間複雜度。java
描述一個算法所須要的空間大小,即佔用的內部內存,或者外部的內存大小,目前的設備性能各方面發展較快,空間複雜度已經不是影響程序性能的主要因素。算法
時間複雜度是一個函數,它定性描述該算法的運行時間。這是一個表明算法輸入值的字符串的長度的函數。時間複雜度經常使用大O符號表述,不包括這個函數的低階項和首項係數。使用這種方式時,時間複雜度可被稱爲是漸近的,亦即考察輸入值大小趨近無窮時的狀況。函數
一個語句執行次數稱爲語句頻度或時間頻度,記爲T(n)。算法花費的時間與算法中語句的執行次數成正比例,哪一個算法中語句執行次數多,它花費時間就多。性能
通常狀況下,算法中基本操做重複執行的次數是問題規模n的某個函數,用T(n)表示,如有某個輔助函數f(n),使得當n趨近於無窮大時,T(n)/f (n)的極限值爲不等於零的常數,則稱f(n)是T(n)的同數量級函數。記做T(n)=O(f(n)),稱O(f(n)) 爲算法的漸進時間複雜度,簡稱時間複雜度code
舉個栗子:
blog
int sum = 0; int b = 100; for(int i = 0; i<= b;i++){ sum += i; } // T(n) = n+1 = 100+1 sum = (1+b)*b/2 //一樣也能夠計算出結果,可是T(n) = 1
簡而言之,在T(n)=O(f(n))
中,當n趨近無窮大時,有 T(n)/f(n) = c
,極限值c是一個不爲0 的常數,就叫 f(n) 是T(n)的同量級函數,若求得 f(n) = n ,則O(f(n)) =O(n)
.排序