學習《演算法導論》第三版(機械工業出版社),分享一些個人所得以及記錄一些筆記,若有錯誤還請不吝指正,謝謝!
本章節通過分析插入排序,引入《演算法導論》中設計和分析演算法的乙個框架
,分上下兩篇博文,一天一篇比較輕鬆
插入排序
通常適用於少量元素的排序,大體上為將乙個混亂無序的陣列序列或其他序列,每一次將乙個數與已排好序的其他數比較後放在其正確的位置。
例如(加粗字型為已排好序的數):
初始狀態:a[5]=5,2,1,3,6
排序一次:a[5]=5,2,1,3,6
排序兩次:a[5]=2,5,1,3,6
排序三次:a[5]=1,2,5,3,6
排序四次:a[5]=1,2,3,5,6
排序五次:a[5]=1,2,3,5,6
通常進行a.length次排序
迴圈不變式
定義:對未進行迴圈,但已按序排列陣列,我們稱為迴圈不變式。其擁有三個性質:
初始化:迴圈的第一次迭代前 ,為真。
保持:迴圈的某次迭代之前為真,則下次迭代時仍為真。
終止:在迴圈終止時,不變式為我們提供乙個有用的性質,該性質有助於證明演算法是正確的。(不同於數學歸納法,數學歸納法可以無限歸納,終止性當迴圈終止時便停止)
利用迴圈不變式證明插入排序的正確性
初始化:若設陣列只有乙個數的時候,很顯然第一次迴圈迭代之前陣列已按序排列,為真,迴圈不變式成立。
保持:即每一次迴圈是否保持了陣列的真值,插入排序每一次將乙個數與已排好序的其他數比較後放在其正確的位置,那麼對迴圈的下一次迭代將保持迴圈不變式。
終止:對於插入排序,排序終止時陣列仍然由陣列中的元素組成,但已按序排列。因此演算法正確。
演算法導論第二章筆記
這一章首先以乙個插入排序演算法開始,以此為切入點分析演算法。書上以偽 來介紹演算法,但是在這裡我基本上會用c語言實現一遍,並用自己的語言複述一遍演算法的思想。首先附上插入排序的具體實現。void insert sort eletype arr int start int end arr j 1 te...
第二章 HTML基礎(上)
一.html語言 標籤 元素 屬性 html hypertest markup language 超文字標記語言 製作網頁的標準語言,標籤構成。標籤由尖括號包圍,比如 通常是成對出現的 單獨出現標籤 標籤巢狀 表示文件型別符合html5標準 1.一級標題比二級標題大 2.段落內容 這是段落,每個段落...
演算法導論第二章
插入排序原始碼 1 include 2 include 3 4using namespace std 56 void insert sort inta 7 17 a i 1 key 18 19 2021 intmain 22view code 逆序輸出 1 include 2 include 3 4...