20172330 2018-2019-1 《程序設計與數據結構》第五週學習總結

20172330 2018-2019-1 《程序設計與數據結構》第五週學習總結

教材學習內容總結

查找

  • 1.靜態方法
    靜態方法又稱爲類方法,能夠經過類名來激活。
    在方法聲明中,能夠經過static修飾符就能夠把它聲明爲靜態的。html

  • 2.泛型方法
    git

  • 3.線性查找法
    即從列表頭開始依次比較每個值,直至找到該目標元素或到列表尾未找到,這是一種最簡單的查找方式,但它的效率並非高效的。算法

  • 4.二分查找法
    二分查找算法是在有序數組中用到的較爲頻繁的一種算法,就是不斷將數組進行對半分割,每次拿中間元素和目標進行比較。數組

排序

排序是這樣一個過程,即基於某一標準,將某一組項目按照某個規定順序排列。具體可分爲如下幾種:
數據結構

當咱們渴望先知道排在前面的是誰時,咱們用選擇排序;當咱們不斷拿到新的數並想保持已有的數始終有序時咱們用插入排序;當給出的數列已經比較有序,只須要小幅度的調整一下時,咱們用冒泡排序。架構

  • 1.選擇排序
    基本思想: 在要排序的一組數中,選出最小的一個數與第一個位置的數交換,而後在剩下的數當中再找最小的與第二個位置的數交換,如此循環到倒數第二個數和最後一個數比較爲止。
    算法步驟
    設數組爲a[0…n-1]
  1. 初始時,數組全爲無序區爲a[0..n-1]。令i=0
  2. 在無序區a[i…n-1]中選取一個最小的元素,將其與a[i]交換。交換以後a[0…i]就造成了一個有序區。
  3. i++並重復第二步直到i==n-1。排序完成。
  • 2.插入排序
    基本思想: 在要排序的一組數中,假設前面(n-1) [n>=2] 個數已是排好順序的,如今要把第n個數插到前面的有序數中,使得這n個數也是排好順序的, 如此反覆循環,直到所有排好順序。
    算法步驟:
    1.將第一待排序序列第一個元素看作一個有序序列,把第二個元素到最後一個元素當成是未排序序列。
    2.從頭至尾依次掃描未排序序列,將掃描到的每一個元素插入有序序列的適當位置。(若是待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的後面。)學習

  • 3.冒泡排序
    冒泡排序是最經常使用的數組排序算法之一,它排序數組元素的過程老是小數往前放,大數日後放,相似水中氣泡往上升的動做,因此稱做冒泡排序。
    算法步驟:
    1.比較相鄰的元素。若是第一個比第二個大,就交換他們兩個。
    2.對每一對相鄰元素做一樣的工做,從開始第一對到結尾的最後一對。這步作完後,最後的元素會是最大的數。
    3.針對全部的元素重複以上的步驟,除了最後一個。
    4.持續每次對愈來愈少的元素重複上面的步驟,直到沒有任何一對數字須要比較。
    測試

  • 4.快速排序
    快速排序是由東尼·霍爾所發展的一種排序算法。在平均情況下,排序 n 個項目要Ο(n log n)次比較。在最壞情況下則須要Ο(n2)次比較,但這種情況並不常見。事實上,快速排序一般明顯比其餘Ο(n log n) 算法更快,由於它的內部循環能夠在大部分的架構上頗有效率地被實現出來。
    算法步驟:
    1 .從數列中挑出一個元素,稱爲 「基準」(pivot),
    2 .從新排序數列,全部元素比基準值小的擺放在基準前面,全部元素比基準值大的擺在基準的後面(相同的數能夠到任一邊)。在這個分區退出以後,該基準就處於數列的中間位置。這個稱爲分區(partition)操做。
    3.基準的位置將數列分爲左右兩部分,將左右兩部分按照上面的步驟重複(遞歸調用)便可。
    遞歸的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞歸下去,可是這個算法總會退出,由於在每次的迭代(iteration)中,它至少會把一個元素擺到它最後的位置去。.net

  • 5.歸併排序
    歸併排序是創建在歸併操做上的一種有效的排序算法。該算法是採用分治法的一個很是典型的應用。
    算法步驟:
  1. 申請空間,使其大小爲兩個已經排序序列之和,該空間用來存放合併後的序列
  2. 設定兩個指針,最初位置分別爲兩個已經排序序列的起始位置
  3. 比較兩個指針所指向的元素,選擇相對小的元素放入到合併空間,並移動指針到下一位置
  4. 重複步驟3直到某一指針達到序列尾
  5. 將另外一序列剩下的全部元素直接複製到合併序列尾.

步驟2~5爲合併兩個有序區間設計

基數排序法

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

  • 問題1:查找算法的比較
  • 問題1解決方案:在將書上9.1.5閱讀完以後又百度了一下詳細的瞭解了
    區別:
    1.線性查找能夠針對任何數組,將數組中的每項依次遍歷出來以後,與所要查找項對比。
    消耗時間也是不規律的,可能查找項處於數組的第一位,也可能處於數組的最後一位。還有可能數組中徹底不存在須要查找的項目。
    2.二分查找法,針對有序數組使用。
    由於數組已經有序排列,能夠經過將數組從中間分割,將中間項與所需查找項對比;而後再根據對比結果,再次向上或者向下,尋找中間項對比,直至完成查找。
    並且,對於查找最開始,能夠經過與第一項和最末項的對比,肯定查找項是否處於此數組中。

線性查找與二分查找法的差別

  • 問題2:五種排序的比較
  • 問題2解決方案
    在閱讀完書籍而且百度後進行了不少了解,能夠說每一種都有其各自的特色,在不一樣的環境下采用不一樣的排序方法。

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

  • 問題1:在測試類的時候出現了錯誤
  • 問題1解決方案:檢查後發現數組名在定義時出錯。

代碼託管

上週考試錯題總結

結對及互評

  • 基於評分標準,我給嚴域俊的博客打分:7分。得分狀況以下:

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

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

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

感想,體會真切的(加1分)

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

  • 博客中值得學習的或問題:
    • 圖片和文字相結合,方便理解。
    • 增長了博客中的目錄,方便查看,同時樣式進行了更新,顯得更加美觀
    • 閱讀了許多資料,使得博客更有說服力。
  • 代碼中值得學習的或問題:
    - commit依舊很詳細,有條理性。

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20172333
    • 結對學習內容
      教材第9章,運行教材上的代碼
      完成課後自測題,並參考答案學習
      完成課後自測題,並參考答案學習
      完成程序設計項目:至少完成PP9.二、PP9.3

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

這一週花了點心思在這一章上面,也好好閱讀了不少內容,掌握的還算能夠。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 10/10
第二週 700/700 1/2 10/20
第三週 700/1400 1/3 10/30
第四周 500/1900 2/5 10/40
第五週 569/2469 1/6 10/50

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法

  • 計劃學習時間:10小時

  • 實際學習時間:10小時

參考資料

相關文章
相關標籤/搜索