演算法導論第2章 章節提要和演算法實現

2021-10-06 21:50:00 字數 1731 閱讀 3361

1.定義

輸入:n個數的乙個序列

1. 偽**

insertion-sort(a)

for j =2 to a.length

key = a[j]

i = j-1

while i>0 and a[i]>key

a[i+1] = a[i]

i = i-1

a[i+1] = key

2. 演算法複雜度

空間複雜度:

時間複雜度:

3.  python實現

def insertion_sort(a):

n = len(a)

for j in range(1,n):

key = a[j]

i = j-1

while i>0 and a[i]>key:

a[i+1] = a[i]

i = i-1

a[i+1]=key

1. 偽**

merge(a,p,q,r)

n1 = q-p-1

n2 = r-q

let l[1..n1+1] and r[1..n2+1] be new arrays

for i = 1 to n1

l[i] = a[p+i-1]

for j = 1 to n2

r[j] = a[q+j]

l[n1+1]= inf

r[n2+1]=inf

i=1j=1

for k = p to r

if l[i]<=r[j]

a[k]=l[i]

i = i+1

else

a[k]=r[j]

j = j+1

merge-sort(a,p,r)

if p<=r

m = floor((p+r)/2)

merge-sort(a,p,m)

merge-sort(a,m+1,r)

merge(a,p,m,r)

2. 演算法複雜度

空間複雜度:

時間複雜度:

3.  python實現

# change the part of using sentinels

def merge(a,p,q,r):

n1 = q-p+1

n2 = r-q

l = a[p:q+1]

r = a[q+1:r+1]

i = 0

j = 0

k = p

while i

if l[i]<=r[j]:

a[k] = l[i]

i = i+1

else:

a[k] = r[j]

k = k+1

while i

a[k] = l[i]

k = k+1

i = i+1

while j

a[k]=r[j]

k = k+1

j = j+1

def merge_sort(a,p,r):

if p

m = (p+r)//2

merge_sort(a,p,m)

merge_sort(a,m+1,r)

merge(a,p,m,r)

演算法導論第2章 演算法基礎

2.1 插入排序 includeusing namespace std void insertion sort int a,int n 宣告 void print int a,int n void insertion sort int a,int n a i 1 key void print int...

《演算法導論》第2章 演算法基礎

學習內容 演算法 尤其是遞迴演算法 複雜度的計算方法 證明演算法正確性的三個步驟 雖然我沒有怎麼弄清楚 幾個排序演算法的實現與比較 插入排序 include using namespace std int a 6 int main a i 1 key 此時a i 為第乙個不比key大的元素 for ...

《演算法導論》筆記 第2章

本章出現了全書第乙個演算法 插入排序。插入排序並不是最直觀的排序演算法,拿它做第乙個講解應該有其他的理由。通過插入排序的講解,偽 約定 迴圈不變式 演算法分析等最基礎的知識被帶了出來。此後又講了第二個演算法 合併排序,並引出了演算法設計中的兩種常見型別 增量法 incremental 和分治法 di...