插入排序演算法 時間複雜度

2021-08-28 13:20:30 字數 1201 閱讀 3583

1.  插入排序演算法

void sortt(int a,int length) // 插入排序演算法

a[j + 1] = temp;

} }}

2. 演算法的時間複雜度 

我們假設計算機執行一行基礎**需要執行一次運算。

int afunc(void)
那麼上面這個方法需要執行 2 次運算

int afunc(int n) {

for(int i = 0; i這個方法需要 (n + 1 + n + 1) = 2n + 2 次運算。

我們把 演算法需要執行的運算次數 用 輸入大小n 的函式 表示,即 t(n) 。

此時為了 估算演算法需要的執行時間 和 簡化演算法分析,我們引入時間複雜度的概念。

定義: 存在常數 c,使得當 n >= c 時 t(n) <= f(n),表示為 t(n) = o(f(n)) 。

如圖:

當 n >= 2 的時候,f(n) = n^2 總是大於 t(n) = n + 2 的,於是我們說 f(n) 的增長速度是大於或者等於 t(n) 的,也說 f(n) 是 t(n) 的上界,可以表示為 t(n) = o(f(n))。

因為f(n) 的增長速度是大於或者等於 t(n) 的,即t(n) = o(f(n)),所以我們可以用 f(n) 的增長速度來度量 t(n) 的增長速度,所以我們說這個演算法的時間複雜度是 o(f(n))。

演算法的時間複雜度,用來度量演算法的執行時間,記作: t(n) = o(f(n))。它表示隨著 輸入大小n 的增大,演算法執行需要的時間的增長速度可以用 f(n) 來描述。

顯然如果 t(n) = n^2,那麼 t(n) = o(n^2),t(n) = o(n^3),t(n) = o(n^4) 都是成立的,但是因為第乙個 f(n) 的增長速度與 t(n) 是最接近的,所以第乙個是最好的選擇,所以我們說這個演算法的複雜度是 o(n^2) 。

ps: 分析的時候可以省去常數次,只保留最高次即可 (有 * 乘法的話還需要用到 log 計算)

排序演算法 插入排序的時間複雜度分析

插入排序的原理是,將陣列分為已排序區間和未排序區間兩部分,從未排序區間中依次取元素跟已排序區間的元素一一對比,找到適合插入的位置。拿陣列 4,5,6,1,3,2 來舉例,如圖所示是排序的 過程。這個過程比上邊的原理詳細的多,本以為可以按照原理來寫出插入排序的 嘗試了幾次發現原理的資訊量並不足以寫出來...

氣泡排序 選擇排序 插入排序演算法及時間複雜度詳解

流程 把0到n個元素中的最大值放在n位置 把0到n 1個元素中的最大值放在n 1位置 把0到n 2個元素中的最大值放在n 2位置 時間複雜度 嚴格的o n2 的演算法 即使資料已經排好序,還要全部按照程式流程比較 交換一遍,所以稱為嚴格o n2 氣泡排序演算法 defbubbling sort ls...

插入排序演算法 時間複雜度和穩定性

排序的思想就是維護乙個有序的部分,將無序部分的資料按照順序插入到有序部分。通俗的講,插入排序的原理就是 先將最後乙個元素作為有序部分,前面元素作為無序部分,將倒數第二個元素和最後乙個元素比較,如果倒數第二個元素大於最後乙個元素,則將倒數第二個元素查到最後乙個元素的位置。此時無序部分是第乙個元素到倒數...