選單
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

DSA 插入排序時間複雜度


有關時間複雜度的通用解釋,請參閱此頁面


插入排序時間複雜度

插入排序最壞情況的場景是陣列已經排序,但數值是從大到小排列的。這是因為在這種情況下,每個新值都必須“穿過”整個已排序的陣列部分。

以下是插入排序演算法為前幾個元素執行的操作:

  • 第 1 個值已在正確的位置。
  • 第 2 個值必須與第 1 個值進行比較並移到其後。
  • 第 3 個值必須與前面兩個值進行比較並移到它們之後。
  • 第 3 個值必須與前面三個值進行比較並移到它們之後。
  • 以此類推……

如果我們繼續這種模式,那麼對於 \(n\) 個值,總操作次數為:

\[1+2+3+...+(n-1)\]

這是數學中一個眾所周知的數列,可以寫成:

\[ \frac{n(n-1)}{2} = \frac{n^2}{2} - \frac{n}{2} \]

對於非常大的 \(n\),\(\frac{n^2}{2}\) 項占主導地位,因此我們可以透過移除第二項 \(\frac{n}{2}\) 來簡化。

使用大 O 符號,插入排序演算法的時間複雜度為:

\[ O(\frac{n^2}{2}) = O(\frac{1}{2} \cdot n^2) = \underline{\underline{O(n^2)}} \]

時間複雜度可以顯示如下:

Time Complexity for Insertion Sort

如您所見,當值 \(n\) 增加時,插入排序使用的時間會快速增加。


插入排序模擬

使用下面的模擬來檢視理論時間複雜度 \(O(n^2)\)(紅線)與實際插入排序操作次數的比較。

{{ this.userX }}

操作次數:{{ operations }}

 

對於插入排序,最佳、平均和最壞情況場景之間存在很大差異。您可以透過執行上面的不同模擬來檢視。

上面的紅線代表理論上的上限時間複雜度 \(O(n^2)\),而實際函式是 \(1.07 \cdot n^2\)。

請記住,如果存在一個正常量 \(C\) 使得 \(C \cdot g(n)>f(n)\),則稱函式 \(f(n)\) 為 \(O(g(n))\)。

在這種情況下,\(f(n)\) 是插入排序使用的運算元,\(g(n)=n^2\),而 \(C=1.07\)。



×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援