2018-2019-20172321 《Java軟件結構與數據結構》第五週學習總結
教材學習內容總結
第9章 排序與查找
9.1查找
- 平均查找長度: 1/2(n+i)
- 時間複雜度: O(N)
- 9.1.4二分查找法
- 二分查找是從排序列表的中間開始查找,而不是從一端或另外一端開始。若是沒有在那個中間元素找到目標元素則繼續查找。
- 二分查找將利用查找池中的項目組是已排序的這一事實。
- 示意圖
- 平均查找長度: (n+1/n)*(log2(n+1))-1
- 時間複雜度: O(logN)
- 查找算法的比較
- 二分查找的每次比較都會刪除一半的可行候選項
- 二分查找的複雜度是對數級的,這使得它對大型查找池很是有效率
9.2排序
- 排序是這樣一個過程,即基於某一標準,要麼以升序要麼以降序將某一組項目按照某個規定順序排列。
- 順序排序:選擇排序、插入排序、冒泡排序
對數排序:快速排序、歸併排序java
- 9.2.1選擇排序法
- 選擇排序算法經過反覆地將某一特定值放到它在列表中的最終已排序位置,從而完成對某一列值的排序。
- 時間複雜度:O(n^2)
- 示意圖
- 9.2.2插入排序法
- 插入排序算法經過反覆的將某一特定值插入到該列表某個已排序的子集中來完成對列表值的排序。
- 時間複雜度:O(n^2)
- 示意圖
- 9.2.3冒泡排序法
- 冒泡排序算法經過重複的比較相鄰元素且在必要時將他們互換,從而完成對某個列表的排序。
- 時間複雜度:O(n^2)
- 示意圖
- 9.2.4快速排序法
- 快速排序算法經過將列表分區,而後對這兩個分區進行遞歸式排序,從而完成對整個列表的排序
- 時間複雜度:O(nlgn)
- 示意圖(快速排序(Quicksort)是對冒泡排序的一種改進。)
- 9.2.5歸併排序法
- 歸併排序算法經過將列表遞歸式分爲兩半直至每一字列表都含有一個元素,而後將這些字列表歸併到一個排序順序中,從而完成對列表的排序。
- 時間複雜度:O(nlgn)
- 示意圖
教材學習中的問題和解決過程
代碼調試中的問題和解決過程
- 問題1和解決方案:首先我將pp9.2的i設定爲3,而後開始編寫,運行以後能夠正確,可是我眉頭一皺發現有兩個地方並不簡單,首先按照我這樣的方法,若是把i改爲其餘的就會排序錯誤或者報錯
同時我還發現,若是按照我如今的思路,好像運行到後來和冒泡排序就沒有區別了,我再一看題,才發現是減小某個大於1的數算法
我這樣寫問題就很大了,最後我又加了一層循環數組
可是數據結構
最後我把 for (scan = 0; scan <= data.length - i; scan++)
的<+改爲=才解決問題學習
上週考試錯題總結
好像沒有錯題,嘿嘿嘿ui
結對及互評
- 博客中值得學習的或問題:
- 優勢:代碼編寫時遇到的問題記錄很是詳細;對書本上的內容理解也到位;這周的博客不只交的早,質量是極高。
- 本週結對學習狀況
其餘(感悟、思考等,可選)
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
|
第一週 |
0/0 |
1/1 |
8/8 |
|
第二週 |
671/671 |
1/2 |
17/25 |
|
第三週 |
345/1016 |
1/3 |
15/40 |
|
第四周 |
405/1421 |
2/5 |
23/63 |
|
第五週 |
1202/2623 |
1/5 |
20/83 |
|
參考資料