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
偽碼:
for i = 1 to a.length
if v == a[i]
return i
return nil
證明正確性:
先證明迴圈的正確性,迴圈不變式為:在 for 迴圈的每次迭代開始的時候,子陣列 a[1 … i - 1] 中不包含元素 v。
正式表述問題:輸入兩個長度為 n 的陣列 a 和陣列 b(下標從 1 到 n),陣列中的元素是 0 或 1,陣列 a 和陣列 b 分別表示乙個二進位制數(下標 1 的元素表示最低位)。要求返回長度為 n+1 的陣列 c,以同樣的格式表示乙個二進位制數,且其大小等於 a 與 b 之和。
偽碼:
int c[n + 1] = , carry = 0
for i = 1 to n
c[i] = (a[i] + b[i] + carry) % 2
carry = (a[i] + b[i] + carry) / 2
c[n + 1] = carry
return c
演算法導論 練習2 1
2.1 1 2.1 2 python 重寫insertion sort python 下列表從0 開始 def insertion sort a for j in range 1,len a key a j i j 1 while i 0 and a i 迴圈不變式的證明 初始化 起始時未對陣列a中...
《演算法導論》2 1練習答案
2.1 1應該不用寫了 2.1 2重寫過程inertion sort,使之按公升序排序 偽 實現 inertion sort a for j 2 to a.length key a j insert a j to the sorted sequence a 1.j 1 i j 1 while i 0...
演算法導論 2 1節程式設計練習C 實現
1.insertion sort a 插入排序 非降序排序 include include include using namespace std vectorinsertion vector a a i 1 key return a int main vectorb insertion a for...