插入排序分析

2021-09-14 04:41:23 字數 1388 閱讀 7825

無聊突發想法,插入排序在平均意義上的效率如何,簡單分析了下,這裡做個記錄。

插入排序比較簡單,分析起來也相對容易,這裡主要對平均意義上的交換次數做一下計算,先簡單畫一畫插入排序過程。

加入初始序列是:

首先從4開始,插入4之前的以排序的序列中,由於4大於2,不用做交換

再跳到第三個元素1,將1插入之前的已排序序列,需要做兩次交換

最後對末尾元素3進行插入排序,需要做一次交換

那麼總交換次數是5次。

如果對長度為n的序列做概率假設,每種序列出現的概率是一樣的,即均勻分布,那麼每種序列出現的機率為1/n!,對n!種序列統計,假如對於第i種序列的交換次數是x_i,那麼e[x]就是平均意義上的交換次數。

しかし很難將每一種序列的交換次數都算出來,所以要想其他辦法來計算;根據假設,每個序列概率相等,那麼等式可以轉化為,cn就是每個排列的交換次數的累計總和;

でも怎麼算cn,似乎可以考慮歸納法,首先假設n個互不相等的元素,累計交換次數是f(n),那麼n+1個元素時,可考慮最後乙個元素可為任意乙個,最後一步時,前面n個元素已經是從小到大已排序狀態,因此最後乙個元素需要分別移動1,2,3...n次,以次數分類,每一類有n!種,則有:

當只有乙個元素時,不用做任何交換,那麼f(1)=0;以上公式是乙個非線性差分方程,直接使用如下公式就可以算出來:

代入an和bn:

最後算出來:

簡單驗證下:

f(1)=0;

f(2)=1;

f(3)=9;....

實際上這些都是交換次數的準確值,最後計算平均意義上的交換次數就很簡單了。

那麼平均意義上,演算法複雜度也可以是

插入排序 折半插入排序

折半插入排序 binary insertion sort 直接插入排序採用順序查詢法查詢當前記錄在已排好序的序列中插入位置,這個 查詢 操作可利用 折半查詢 來實 現,由此進行的插入排序稱之為折半插入排序 binary insertion sort 演算法思想 1 將待排序的記錄存放在陣列r 1.n...

插入排序 折半插入排序

折半插入排序是基於直接插入排序的優化。直接插入排序 將第i個元素插入時,通過折半查詢的方式,來查詢第i個元素合適的位置。當0 i 1 位置上的元素都已經排序ok,現需要插入第i個元素,設其值為temp 令low 0,high i,mid high low 2。那麼temp可能插入的位置是 low h...

插入排序 希爾插入排序

本文借鑑於lsgo實驗室創始人馬老師 演算法 希爾插入排序 delta len nums 2 while delta 0 shell delta,nums delta delta 2return nums defshell delta,key for i in range delta,len key...