第九章 排序與查找html
14.分塊查找步驟:①先選取各塊中的最大關鍵字構成一個索引表;②查找分兩個部分:先對索引表進行二分查找或順序查找,以肯定待查記錄在哪一塊中;而後,在已肯定的塊中用順序法進行查找。java
5.選擇排序法:掃描整個列表找出最小值,將這個值與該列表第一處交換,再掃描剩下的列表找出最小值,將它與整個列表的第二處交換,以此類推。(代碼須要用一個temp變量暫時存儲最小值)git
9.歸併排序法:經過將列表遞歸式分紅兩半直至每一子列表都只含有一個元素,而後將這些子列表按順序重組。(如果奇數,則分解是後面比前面多一個。)算法
10.基數排序法:基於排序關鍵字(排序基於某個特定的值)的結構。(就是先建立基數的隊列,而後把數放進相應的隊列中,經過不斷的遍歷找到最後的位置)數組
11.基數:排序關鍵字的可能取值的個數(也就是每種排序關鍵字都會單首創建一個隊列,最後的隊列個數)。數據結構
問題1解決方案:函數
總結一下就是<T extends Comparable<? super T>>T的實例類型更多了,包括了父類。學習
問題2解決方案:1.先從數列中取出一個數做爲基準數。2.分區過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3.再對左右區間重複第二步,直到各區間只有一個數。測試
問題3:這行代碼的意思是什麼?做用是什麼?.net
問題3解決方案:java.lang.Character.digit(char ch, int radix)方法,在指定的基數返回字符ch的數值。這行代碼是爲了確保所得到的這個數是在基數範圍內。在書上的代碼中,也就是爲了確保數字是在0-9之間。
問題4解決方案:裝填因子越大,越不容易產生衝突。裝填因子 = 散列表元素個數/哈希表長度
問題1:明明data是泛型數組知足swap方法的形參形式,爲何會紅?
問題1解決方案:由於selectionSort方法用的是<T extends Comparable<? super T>>,保持統一swap方法也應該是<T extends Comparable<? super T>>。
1 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//設置日期格式 2 System.out.println(df.format(new Date()));// new Date()爲獲取當前系統時間
(1)以毫秒爲單位計算
static long currentTimeMillis() , 該方法返回值是從1970年1月1日凌晨到此時刻的毫秒數
1 long startTime=System.currentTimeMillis(); //獲取開始時間 2 doSomeThing(); //測試的代碼段 3 long endTime=System.currentTimeMillis(); //獲取結束時間 4 System.out.println("程序運行時間: "+(end-start)+"ms");
(2)以納秒爲單位計算
1 long startTime=System.nanoTime(); //獲取開始時間 2 doSomeThing(); //測試的代碼段 3 long endTime=System.nanoTime(); //獲取結束時間 4 System.out.println("程序運行時間: "+(end-start)+"ns");
問題3:列表已經排序好了,爲何還有比較次數?並且次數還不相同?
問題3解決方案:須要進行比較,才能知道是否排序好了,不一樣的排序方法,須要比較的次數不一樣。
問題4:PP9.2所寫的類形參是T[] data,在測試類中若是直接用int[],是不行的。
問題4解決方案:T[] 是針對對象而言的,因此若是想直接放入數字,那麼須要用Integer[]來實現。
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 0/0 | 1/1 | 2/2 | |
第二週 | 1010/1010 | 1/2 | 10/12 | |
第三週 | 651/1661 | 1/3 | 13/25 | |
第四周 | 2205/3866 | 1/4 | 15/40 | |
第五週 | 967/4833 | 2/6 | 22/62 |
計劃學習時間:30小時
實際學習時間:22小時
改進狀況:這周的內容是真的多。並且很是重要,雖然原理簡單,可是代碼實現起來仍是有必定難度的。