1. 程式人生 > >演算法導論 練習 2.1

演算法導論 練習 2.1

2.1-1

插入排序,基礎問題
原陣列:31,41,59,26,41,58
第一趟:31,41,59,26,41,58
第二趟:31,41,59,26,41,58
第三趟:26,31,41,59,41,58
第四趟:26,31,41,41,59,58
第五趟:26,31,41,41,58,59

加粗是當前處理的數字

2.1-2

將書中 A[i] > key 改成 A[i] < key

2.1-3

挨個比較就行,程式碼就沒必要寫了

證明:

初始化:令陣列A為空,那顯然會返回空,證明第一輪中迴圈不變式是成立的

保持:我們證明每一輪迴圈不變式都成立,①如果 A[1..i−1] 中不存在v,那麼我們看 A[i],如果 A[i] == v,那麼返回i,迴圈不變式成立,如果 A[i] != v,那麼我們進行下一步,這裡情況又跟①處相同,既這裡迴圈不變式永遠成立
終止

:當i >= A.size() 時迴圈結束,此時沒有找到v,返回NIL,迴圈不變式成立

2.1-4

按位加,加進位加進位加進位加進位…..,虛擬碼不寫了。。。