本週學習了第六章排序與查找php
public static <T extends Comparable<T>> boolean linearSearch (T[] data, int min, int max, T target)
public static <T extends Comparable<? super T>> void selectionSort (T[] data)
之中<? super T>表示的是什麼意思排序方法 | 時間複雜度 |
---|---|
選擇排序 | O(n^2) |
插入排序 | O(n^2) |
冒泡排序 | O(n^2) |
快速排序 | O(n*log2n) |
歸併排序 | O(nlog2n) |
基數排序 | O(n) |
三種順序排序方法都使用了內外兩層循環進行排序操做,因此時間複雜度都爲nxn-->O(n^2);
快速排序和歸併排序兩種對數排序在排序中採起了遞歸的方法,所以在元素比較中只用到了大約nlog2n次比較,時間複雜度爲O(log2n);還有一種特殊的基數排序,由於在排序過程當中不涉及到元素之間的比較,只須要將元素在隊列之間進行移動操做,操做時只用遍歷數據便可,所以能夠用c*n來表示(c是常數),因此時間複雜度爲O(n)。html
問題1解決方案:在網上沒能找到關於間隔排序的資料,因此不太懂原理,應該也和冒泡排序差不太多吧,就按照題目的要求拼好了代碼,可運行出來的結果排序彷佛並無完成。前端
假設如今有一個長度爲6的數組,第一次的i爲3,每一次迭代後i減小的值爲2,那麼在第一次迭代中,第一個元素與第三個元素進行比較,第二個元素與第四個元素進行比較,第三個元素與第五個元素進行比較,第四個元素與第六個元素進行比較,第一次迭代結束,i的值爲1,第一個元素與第二個元素進行比較...相鄰元素分別進行比較,迭代結束,i的值爲-1小於1,此時循環結束,排序完成。
git
若是每次i的值減小1
web
與題目給的信息偏偏想反,反卻是每次減一時能得出正確的排序,屢次修改代碼中的間隔值,發現i每次減一時排序都能正確完成可是減2、減三時只能是在部分間隔值的狀況下才能排序完成數組
Date da = new Date(); long s1 = da.getTime(); ...//具體運行的代碼 long s2 = System.currentTimeMills(); System.out.println(s2 - s1);
代碼開始運行時記錄當前時間,代碼結束前再記錄一下當前時間,最後s2-s1即爲運行時間,思路是沒有問題,但是運行結果出來就有點小瑕疵,如圖
數據結構
運行時間全爲0且沒帶單位,我以爲系統並無錯,可能真是運行時間過短吧,小於一秒的計算機就自動四捨五入歸爲0了(?),我是這樣認爲的,因此我又尋找到另外一種比較精密計量時間的方法
以毫秒爲單位計算的:學習
long startTime = System.currentTimeMillis();//獲取當前時間 doSomeThing(); long endTime = System.currentTimeMillis(); System.out.println("程序運行時間:"+(endTime-startTime)+"ms");
以納秒爲單位計算的:this
long startTime = System.nanoTime();//獲取當前時間 doSomeThing(); long endTime = System.nanoTime(); System.out.println("程序運行時間: "+(end-start)+"ns");
好似萬事俱備,運行一下試試,問題仍是出現了,毫秒計時依然爲0額。
此時我又找到了Date.getTime的說明
Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Date object,顯然這個方法一樣是以毫秒爲單位來計量代碼運行的時間的,以前什麼四捨五入的解釋就有問題了,在網上尋找答案也只獲得一些絕不沾邊的東西,有點束手無策,後來我再仔細一瞅,發現納秒計時的方法彷佛沒有出錯啊,因而改爲納秒計時,而後就運行成功???有點莫名其妙。
debug
原覺得計時在稀裏糊塗之中就能夠所有解決了,把五大排序法中分別加上s一、s2,而後運行一下,此次又是歸併排序的計時出現了些問題,如圖
debug一下,錯誤應該出在忽略了遞歸上面,就是計算機每執行一次mergeSort的方法,就得從新開始計時一次,因此最後的結果會輸出不少個歸併排序的計時,參照快速排序的方法,至關於在歸併排序的外面加一層殼專門用來計時,其餘也想不出更好的辦法了,最終結果如圖
比較次數
上週沒有錯題哦
基於評分標準,我給譚鑫的博客打分:8分。得分狀況以下:
正確使用Markdown語法(加1分):
模板中的要素齊全(加1分)
教材學習中的問題和解決過程, 三個問題加3分
代碼調試中的問題和解決過程, 三個問題加3分
基於評分標準,我給方藝雯的博客打分:8分。得分狀況以下:、
正確使用Markdown語法(加1分):
模板中的要素齊全(加1分)
教材學習中的問題和解決過程, 兩個問題加2分
代碼調試中的問題和解決過程, 三個問題加3分
排版精美加1分
這周在代碼學習上仍是遇到了一些小的問題,在資料缺少的狀況下,本身動手寫代碼的能力、分析問題的能力有了一些增強,但仍是稍顯欠缺,須要繼續努力
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 0/0 | 1/1 | 8/8 | |
第二週 | 470/470 | 1/2 | 12/20 | |
第三週 | 685/1155 | 2/4 | 10/30 | |
第四周 | 2499/3654 | 2/6 | 12/42 | |
第六週 | 1218/4872 | 2/8 | 10/52 |