建立一個泛型方法:在方法頭的返回類型前插入一個泛型聲明便可:html
public static <T extends Comparable< T>> boolean linearSearch (T[] data, int min, int max, T target)
這樣含有返回類型和參數類型的方法就可使用泛型參數了。需注意,泛型聲明需位於返回類型以前,這樣泛型纔可做爲返回類型的一部分。建立泛型方法以後就不用在每次使用Searching類的方法以後都去實例化該類,只須要用類名和要用來替換泛型的具體數據類型,就能夠調用靜態方法。java
二分查找的優點:git
線性查找的複雜度爲O(n),二分查找的複雜度是對數級的,爲O(log2n),這使得他對於大型查找池很是有效率。線性查找的優點:算法
線性查找比二分查找簡單,編程調試容易,而且線性查找無需花費額外成原本排序該查找列表。對於兩者的選擇須要在將查找池保持爲排序狀態和提升查找效率的努力之間權衡。編程
問題一解決:結合圖示數組
發現因爲數字被儲存在隊列中,因此進隊列出隊列的順序是很重要的,先進先出,對於圖中的例子來講,第一次遍歷對個位數進行排序,出隊列時按照數字0~5分別從本身的隊列中出來,對於十位的第四個數的那個隊列來講,第一次遍歷的價值就體現出來,145 143 442 341按順序從右到左先進入隊列,到第三次遍歷時,對於數字1的隊列,143比145先出來進入到新隊列,因爲在第一次遍歷時已經對個位進行了排序,143比145小,在百位上已經完成了排序。因此說,先比較個位而後十位百位,能夠巧妙的按從小到大的順序排序。學習
問題二:在書上基數排序法中看到代碼測試
if(temp.length()>position){ digit = Character.digit(temp.charAt(temp.length()-1 - position), 10);//十進制 }else{ digit = Character.digit('0', 10);//十進制 }
不知道方法digit = Character.digit('0', 10);
是什麼意思。同時也不是很理解基數排序代碼的含義。.net
問題二解決:經過查找資料發現java.lang.Character.digit()方法
3d
意思是輸出ch的indax進製表示。
因此說課本代碼的意思是輸出temp.charAt(temp.length()-1 - position)
的十進制表示。對代碼的理解爲:
for (int scan = 0; scan < list.length; scan++) { //scan查找每一個數字 temp = String.valueOf(list[scan]);// /轉化爲字符串 if(temp.length()>position){ //例如三位數在對百位排序,就把對應位次的字符換爲十進制的數字 digit = Character.digit(temp.charAt(temp.length()-1 - position), 10);//十進制 }else{ //例如對於兩位數在對百位排序,就在高位添加0,對數字不影響 digit = Character.digit('0', 10);//十進制 } //對本次遍歷的數排序。例如第一次遍歷對個位數進行排序,則按照個位數排序的結果存入隊列中 digitQueues[digit].add(new Integer(list[scan]));// 隊列 }
問題一:運行出現錯誤
for (scan = 0; scan + i <= position; scan++)
第一種(以毫秒爲單位):
long startTime = System.currentTimeMillis(); //獲取開始時間
doSomething(); //測試的代碼段
long endTime = System.currentTimeMillis(); //獲取結束時間
System.out.println("程序運行時間:" + (endTime - startTime) + "ms"); //輸出程序運行時間第二種(以納秒爲單位):
long startTime=System.nanoTime(); //獲取開始時間
doSomeThing(); //測試的代碼段
long endTime=System.nanoTime(); //獲取結束時間
System.out.println("程序運行時間: "+(endTime-startTime)+"ns");
問題三:出現屢次輸出
問題三解決:
對於插入排序法來講,因爲count2在循環內部,輸出的count2直接是聲明變量的值0,而輸出比預計多猜想是由於迭代時形成累計輸出,而後添加了每一個方法的輸出語句,證實猜想是正確的
而後發現插入排序的次數一直是0
後來發現須要在while循環外面再加一次計數。
錯題一:
錯題二:
錯題二解析:Java Collections API包含三個索引列表的實現,add(int index,E element),remove(int index),set(int index,E element)
此次的做業小組配合不少,在作PP9.3時,咱們三我的的比較次數都不徹底同樣,最後在羣裏一個方法一個方法測試,討論正確的比較計數。感受小組合做的做用是很是大的!
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | |
---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 |
第一週 | 0/0 | 1/1 | 8/8 |
第二週 | 1163/1163 | 1/2 | 15/23 |
第三週 | 774/1937 | 1/3 | 12/50 |
第四周 | 3596/5569 | 2/5 | 12/62 |
第五週 | 3329/8898 | 2/7 | 12/74 |