目錄html
一、查找git
查找是在一組數據項內找到指定目標或是肯定目標不存在的過程。面試
線性查找算法
二分查找
二分查找利用了查找池有序的特性,同時也要求表必須是有序的。相比於線性查找,二分查找更加高效。markdown
哈希查找
經過存儲不一樣的哈希值來肯定元素的位置數據結構
二、排序學習
排序是按某種標準將一列數據項按肯定的次序重排的過程。加密
選擇排序
反覆地將一個個具體的值放到它最終的有序位置,從而完成排序。spa
插入排序
反覆地將一個個具體的值插入到表的已有序子表中,從而完成排序。.net
冒泡排序
反覆地比較兩個相鄰元素,若是必要就交換次序,從而完成排序。
快速排序
經過劃分子表,遞歸地對兩個子表進行排序,從而完成排序。關鍵是要選擇一個好的劃分元素。
歸併排序
遞歸地將表平分爲兩部分,直到每一個子表中只含一個元素,將這些表歸併爲有序表,從而完成排序。
排序算法效率
問題1解決方案:快速排序算法經過劃分表,再遞歸地對兩個子表進行排序,從而完成一組值的排序。最好的狀況是樞紐元選取得當,每次都能均勻的劃分序列, 時間複雜度爲 O(n log n);最壞狀況是樞紐元爲最大或者最小數字,全部數都被劃分到一個序列中,退化爲冒泡排序,時間複雜度爲O(n²)。因此快速排序的關鍵是要選取一個好的劃分元素。
問題2解決方案:二分查找的前提是查找池元素有序,假若是亂序的,就會誤導查找方向從而結果錯誤。
(statistics.sh腳本的運行結果截圖)
上週未進行考試,故沒有錯題
查找與排序是數據結構裏面入門級的算法,三年前學 Pascal 的時候由於高中學科時間緣由沒有進行深刻學習,留下了很大遺憾,但願能在如今補回來。
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 10000行 | 30篇 | 400小時 | |
第一週 | 109/109 | 2/2 | 28/28 | 學習了Java的基本語法格式,熟練使用 Linux Bash 命令 |
第二週 | 550/659 | 1/3 | 23/51 | 學習掌握JDB調試命令 |
第三週 | 1028/1687 | 2/5 | 30/81 | 學習類的編寫與使用 |
第四周 | 542/2229 | 2/7 | 22/103 | 學習方法重載,類的繼承、聚合等 |
第五週 | 1197/3426 | 2/9 | 15/118 | 學習 Java Socket ,瞭解加密算法 |
第六週 | 1344/4770 | 1/10 | 22/140 | 學習多態與異常處理 |
第七週 | 3190/7960 | 2/12 | 30/170 | 學習Android |
第八週 | 1588/9548 | 2/14 | 30/200 | 學習查找與排序 |
計劃學習時間:20小時
實際學習時間:30小時
改進狀況:
(有空多看看現代軟件工程 課件 軟件工程師能力自我評價表)