排序方法 平均情況 最好情況 最壞情況 輔助空間 穩定性
氣泡排序 o(n^2) o(n) o(n^2) o(1) 穩定
選擇排序 o(n^2) o(n^2) o(n^2) o(1) 不穩定
插入排序 o(n^2) o(n) o(n^2) o(1) 穩定
希爾排序o(n*log(n))~o(n^2) o(n^1.3) o(n^2) o(1) 不穩定
堆排序 o(n*log(n)) o(n*log(n)) o(n*log(n)) o(1) 不穩定
歸併排序 o(n*log(n)) o(n*log(n)) o(n*log(n)) o(n) 穩定
快速排序 o(n*log(n)) o(n*log(n)) o(n^2) o(1) 不穩定
氣泡排序經過優化以後,最好時間複雜度可以達到o(n)。設定乙個標誌位,如果有一趟比較中沒有發生任何交換,可提前結束,因此在正序情況下,時間複雜度為o(n)。選擇排序在最壞和最好情況下,都必須在剩餘的序列中選擇最小(大)的數,與已排好序的序列後乙個位置元素做交換,依次最好和最壞時間複雜度均為o(n^2)。插入排序是在把已排好序的序列的後乙個元素插入到前面已排好序(需要選擇合適的位置)的序列中,在正序情況下時間複雜度為o(n)。堆是完全二叉樹,因此樹的深度一定是log(n)+1,最好和最壞時間複雜度均為o(n*log(n))。歸併排序是將大陣列分為兩個小陣列,依次遞迴,相當於二叉樹,深度為log(n)+1,因此最好和最壞時間複雜度都是o(n*log(n))。快速排序在正序或逆序情況下,每次劃分只得到比上一次劃分少乙個記錄的子串行,用遞迴樹畫出來,是一棵斜樹,此時需要n-1次遞迴,且第i次劃分要經過n-i次關鍵字比較才能找到第i個記錄,因此時間複雜度是\sum_^(n-i)=n(n-1)/2,即o(n^2)。
常見排序演算法的時間複雜度
最好最壞 平均陣列中插入元素 o 1 每次都在陣列的末尾插入 o n 每次都在陣列的頭部插入 假設資料量為n。最好 最壞平均 基本排序 冒泡 無標誌位 o n 2 o n 2 o n 2 冒泡 有標誌位 o 1 說明 已有序,只需1次 o n 2 說明 逆序,標誌位無效。同上 o n 2 說明 以有...
常見的時間複雜度
常見演算法時間複雜度 o 1 優 劣 o 1 2n o n o n2 o 2n 時間複雜度按數量級遞增排列依次為 常數階o 1 對數階o log2n 線性階o n 線性對數階o nlog2n 平方階o n2 立方階o n3 k次方階o nk 指數階o 2n 常用的排序演算法的時間複雜度和空間複雜度 ...
演算法時間複雜度空間複雜度
演算法 是解決某一類問題的通法,即一系列清晰無歧義的計算指令。每個演算法只能解決具有特定特徵的一類問題,但乙個問題可由多個演算法解決。乙個演算法應該有以下五個方面的特性 比較演算法的優劣我們從兩個維度去進行考量 時間 空間 時間複雜度,空間複雜度 找出基本語句 演算法中執行次數最多的那條語句就是基本...