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...