跟我一起學 演算法導論 插入排序

2021-09-22 12:08:02 字數 2193 閱讀 5529

演算法導論 - 演算法入門 ,一小節(插入排序,複雜度)

#插入排序                -         複雜度

definsertion_sort(arr):             #1

forj 

inxrange( 

1,len(arr) ):   

#n-1

key 

=arr[j]                 

#n-1i=

j-1#

n-1while

i>=

0 and

arr[i]

>

key : 

#n(n-1)/2

arr[i+1

] =arr[i]        

#n(n-1)/2i=

i-1#

n(n-1)/2

arr[i+1

] =key               

#n-1

print

arr                    

#n-1

驗證結果 :

>>> arr=[5,2,4,6,1,3]

>>> insertion_sort(arr)

[2, 5, 4, 6, 1, 3]

[2, 4, 5, 6, 1, 3]

[2, 4, 5, 6, 1, 3]

[1, 2, 4, 5, 6, 3]

[1, 2, 3, 4, 5, 6]

驗證複雜度:

z = 5(n-1)+1+3n(n-1)/2 

我們測試資料 為  n=6  

當資料極端情況就是需要全部重新排列 

就是 [6,5,4,3,2,1] 要排出 [1,2,3,4,5,6] 這樣

>> z = 71 

一種比較笨的 驗證方法 供大家拍磚 :

definsertion_sort(arr):         ii=

0ii+=1

forj 

inxrange( 

1,len(arr) ):

ii+=

1key 

=arr[j]            

ii+=1i

=j-1

ii+=

1while

i>=

0 and

arr[i]

>

key :    

ii+=

1arr[i+1

] =arr[i]    

ii+=1i

=i-1

ii+=

1arr[i+1

] =key            

ii+=

1print

arr            

ii+=

1print

"----

",str(ii)

>>> arr=[6,5,4,3,2,1]

>>> insertion_sort(arr)

[5, 6, 4, 3, 2, 1]

[4, 5, 6, 3, 2, 1]

[3, 4, 5, 6, 2, 1]

[2, 3, 4, 5, 6, 1]

[1, 2, 3, 4, 5, 6]

---- 71  #複雜度驗證為 71 

羅嗦下 n(n-1)/2

極端情況下  

i=1 ; j 需要挪動 1次

i=2 ; j 挪動 1+2次

i=3 ; j 挪動 1+2+3次

....

i=n ; j 挪動 1+2....+n

我們又找到 (1+n)+(2+n-1)+(3+n-2).... = (1+n)n/2

我們這 的 i 是從 2 次開始的 也就是說  (n-1)n/2 了 

deftn(ii):ti=

0for

i in

xrange(ii) :

forj 

inxrange(i) :

ti+=

1print

tiprint

tn(2

)  #

1 = 1

print

tn(3

)  #

3 = 1+2

print

tn(4

)  #

6 = 1+2+3..

跟我一起學 演算法導論 堆

encoding utf 8 遞迴 單條路 自下往上排序 defheap adjust data,s,m if2 s m return 宣告 預設父節點位置 temp s 1 左 子節點值 大於 父節點值 預設父節點位置 為 左子節點位置 ifdata 2 s 1 data temp temp 2 ...

跟我一起學 演算法導論 分治演算法

演算法導論,一章二小節 分治演算法 defmerge a,p,q,r print s s s s p,q 1 q 1,r 1 if p q l a p 10 10 else l a p q 1 10 10 if q 1 r r a r 10 10 else r a q 1 r 1 10 10 i j...

跟我一起學 演算法導論 函式的增長

3.1 漸近號 漸近範圍 f n g n a b 漸近上界 f n g n a b 0 f n cg n 漸近下界 f n g n a b 0 cg n f n 非漸近上界 f n o g n alim n f n g n 0 非漸近下界 f n g n a b 0 cg n lim n f n g...