天天看點

折半插入排序比較次數時間複雜度折半插入排序 — 插入第N個數時比較次數時間複雜度O(nlog2(n)):

折半插入排序比較次數時間複雜度

折半插入排序 — 插入第N個數時比較次數時間複雜度O(nlog2(n)):

根據算法思想有以下的推論:

每個數插入最多走了一個判定樹的深度

即log2(n-1)(取最少正整數)+1

解析:在有序數組中插入的數每次比較都是與Mid(Mid指向待比較數組中的中間位置)所指向的數進行對比,先将有序數組轉化成類似判定樹的二叉樹形式,可以得出比較的次數最多隻能是這一棵二叉樹的深度。

示例:

假設一組有序數組:1 2 3 4 5 6 7 8 9 (注意已經選過的Mid不再重選)
第一次Mid:
low=1,high=9,是以Mid=(low+high)/2=5
        建立二叉樹的根
             ⑤
           
第二次Mid:
在5的左邊low=1 high=4 Mid=(low+high)/2=2
在5的右邊low=6 high=9 Mid=(low+high)/2=7
         繼續擴充二叉樹
             ⑤
          ②     ⑦
           
第三次Mid:
在2的左邊low=1 high=1 Mid=(low+high)/2=1
在2的右邊low=3 high=4 Mid=(low+high)/2=3
在7的左邊low=6 high=6 Mid=(low+high)/2=6
在7的右邊low=8 high=9 Mid=(low+high)/2=8
         繼續擴充二叉樹
             ⑤
        ②         ⑦
    ①     ③    ⑥      ⑧
           
第四次Mid:
在3的右邊low=4 high=4 Mid=(low+high)/2=4
在8的右邊low=9 high=9 Mid=(low+high)/2=9
        繼續擴充二叉樹
            ⑤
     ②            ⑦
  ①     ③      ⑥     ⑧
          ④            ⑨
           

一直到有序數組的全部元素都有這時候就轉化完成

(任何的有序數組都能用這一方法轉化為二叉樹)

當插入一個10時:(直到沒有數和它比較時候就比較完畢,小左大右)
         ⑤        (先與5進行第一次比較,大于5再5的右邊比較)
    ②        ⑦    (與7進行第二次比較,大于7再7的右邊比較)
  ①   ③    ⑥   ⑧  (與8進行第三次比較,大于8再8的右邊較)
       ④        ⑨(與9進行第四次比較,大于9再9的右邊較,9沒有右孩子不用再比較,比較完畢)

比較次數為4次 
根據公式可得log2(10-1)(取最少正整數)+1=3+1=4
           

可以看出,在插入第N個數進入一個有序的數組時,這時有序數組已經存在了N-1個數,并且比較的次數最多也隻能是由有序數組已經存在的N-1個數所轉化成的二叉樹深度。

即log2(N-1)(取最少正整數)+1

具有n個結點的完全二叉樹的深度為「log2n」+1
是以比較次數N<=log2(n-1)(取最少正整數)+1
      n-1
令i=n, ∑ =log2(1)+1+log2(2)+1+....+log2(n-1)+1
      i=1
=log2[(n-1)!]+n
當n很大時log2[(n-1)!]≈log2(n!)
在計算機内為了友善計算log2(n!)≈n*log2(n)
log2(n!)與n*log2(n)同為一個數量級
           

可得比較次數的總時間複雜度為O(nlog2(n))

第一次寫文章,未必正确,如有錯誤請指出,小弟一定更改。

繼續閱讀