20182314《程序設計與設計結構》 第八週學習總結

20182314《程序設計與設計結構》 第八週學習總結

教材學習內容總結

第十四章:算法分析:html

一、什麼是歸併排序?
並排序(MERGE-SORT)是創建在歸併操做上的一種有效的排序算法,該算法是採用分治法(Divide and Conquer)的一個很是典型的應用。將已有序的子序列合併,獲得徹底有序的序列;即先使每一個子序列有序,再使子序列段間有序。若將兩個有序表合併成一個有序表,稱爲二路歸併。歸併排序是一種穩定的排序方法。java

二、順序查找:順序查找是按照序列原有順序對數組進行遍歷比較查詢的基本查找算法。git

三、二分查找也稱折半查找(Binary Search),它是一種效率較高的查找方法。可是,折半查找要求線性表必須採用順序存儲結構,並且表中元素按關鍵字有序排列。算法

四、哈希查找:哈希查找是經過計算數據元素的存儲地址進行查找的一種方法。數組

五、插入排序:對於任意一個序列以及一個給定的元素,將給定元素與序列中元素依次比較,直到找出與給定關鍵字相同的元素,或者將序列中的元素與其都比較完爲止。數據結構

六、折半插入排序:折半插入排序(binary insertion sort)是對插入排序算法的一種改進,因爲排序算法過程當中,就是不斷的依次將元素插入前面已排好序的序列中。因爲前半部分爲已排好序的數列,這樣咱們不用按順序依次尋找插入點,能夠採用折半查找的方法來加快尋找插入點的速度。ide

七、快速排序:經過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的全部數據都比另一部分的全部數據都要小,而後再按此方法對這兩部分數據分別進行快速排序,整個排序過程能夠遞歸進行,以此達到整個數據變成有序序列。學習

教材學習中的問題和解決過程

  • 問題1:老師在課上說選擇排序不是一種穩定的算法,我很疑惑爲何。設計

  • 問題1解決方案:後來,我仔細想了一下選擇排序是給每一個位置選擇當前元素最小的,好比給第一個位置選擇最小的,在剩餘元素裏面給第二個元素選擇第二小的,依次類推,直到第n - 1個元素,第n個元素不用選擇了,由於只剩下它一個最大的元素了。那麼,在一趟選擇,若是當前元素比一個元素小,而該小的元素又出如今一個和當前元素相等 的元素後面,那麼交換後穩定性就被破壞了。比較拗口,舉個例子,序列5 8 5 2 9,咱們知道第一遍選擇第1個元素5會和2交換,那麼原序列中2個5的相對先後順序就被破壞了,因此選擇排序不是一個穩定的排序算法。調試

代碼調試中的問題和解決過程

  • 問題1:設置哨兵在數組第一位到底有啥用

  • 問題1解決方案: 在鏈表中的插入、刪除操做,須要對插入第一個結點和刪除最後一個結點進行特殊處理,
    好比插入時判斷head結點是否null,使用哨兵結點後能夠最大限度減小這種判斷。

代碼託管




上週考試錯題總結

本週無錯題

結對及互評

點評:

  • 代碼練習較多,問題較爲深邃(至少我看不懂)

  • 基於評分標準我給本博客打分:16分。得分狀況以下:

1.正確使用Markdown語法(加1分)

2.模板中的要素齊全(加1分)

3.教材學習中的問題和解決過程(加3分)

4.代碼調試中的問題和解決過程(加4分)

5.其餘加分(加7分)

6.進度條中記錄學習時間與改進狀況(1)

7.感想,體會不假大空(1)

8.有動手寫新代碼(1)

9.排版精美(1)

10.錯題學習深刻(1)

11.點評認真,能指出博客和代碼中的問題(1)

12.結對學習狀況真實可信(1)

其餘(感悟、思考等,可選)

最近java水平感受有所提高,但仍是不太想寫書上的代碼。最近又要學安卓了,安卓確實有點難,一開始都沒找到敲代碼的位置,確實有點心態爆炸,但願能在跟上的同時儘可能往前面攆一攆。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 10000行 30篇 400小時
第7周 808/5181 2/2 20/20

參考資料

相關文章
相關標籤/搜索