1. 程式人生 > >20172316 2017-2018-2 《程式設計與資料結構》實驗三報告

20172316 2017-2018-2 《程式設計與資料結構》實驗三報告

課程:《程式設計與資料結構》
班級: 1723
姓名: 趙乾宸
學號:20172316
實驗教師:王志強
必修/選修:必修


1.實驗內容

1

定義一個Searching和Sorting類,並在類中實現linearSearch(教材P162 ),SelectionSort方法(P169),最後完成測試。
要求不少於10個測試用例,提交測試用例設計情況(正常,異常,邊界,正序,逆序),用例資料中要包含自己學號的後四位
提交執行結果圖。

2

重構你的程式碼
把Sorting.java Searching.java放入 cn.edu.besti.cs1723.(姓名首字母+四位學號) 包中(例如:cn.edu.besti.cs1723.G2301)
把測試程式碼放test包中
重新編譯,執行程式碼,提交編譯,執行的截圖(IDEA,命令列兩種)

3

參考http://www.cnblogs.com/maybe2030/p/4715035.html 在Searching中補充查詢演算法並測試
提交執行結果截圖

4

補充實現課上講過的排序方法:希爾排序,堆排序,二叉樹排序等(至少3個)
測試實現的演算法(正常,異常,邊界)
提交執行結果截圖


2. 實驗過程及結果

(1) 在實驗三(1)中,分別實現線性查詢和選擇排序,皆是書上程式碼,曾經實現過,再加深理解之後複製了過來。測試時採用Junit測試,在陣列{2, 0, 1, 7, 2, 3, 1, 6}中,分別查詢位於最後的“6”,重複的“2”,中間的“7”,索引0、索引7處的數字,以及所找數字不存在的情況。結果正常。

然後對選擇排序進行測試,分別使用數字、英文字母、特殊字元、中文進行了測試,結果正常。

(2) 對原有程式碼重構了之後,在IDEA和虛擬機器上分別對程式碼進行測試,測試通過。

(3) 在原有程式碼基礎上增加新的查詢方法。
我增添了三個新的查詢方法:二分查詢、插值查詢、以及斐波那契(Fibonacci)查詢。由於C++和Java語言非常相似,轉換起來並不困難。

(4) 補充排序方法。我補充了四個排序方法:氣泡排序、歸併排序、希爾排序以及插入排序


3. 實驗過程中遇到的問題和解決過程

(1) 從基本原理上來看,斐波那契查詢和二分查詢幾乎沒有什麼不同,區別僅僅在於分割的位置不同,為什麼會去選擇斐波那契查詢?
兩者貌似沒有什麼太大的不同,但實驗三(3)中提供的部落格中提到,

(斐波那契查詢在)最壞情況下,時間複雜度為O(log2n),且其期望複雜度也為O(log2n)

而二分查詢在

最壞情況下,關鍵詞比較次數為log2(n+1),且期望時間複雜度為O(log2n)

其次,斐波那契查詢在進行查詢之前,已經建立好了一個斐波那契數列,以便於查詢的進行,每一次分割時都直接取數列中確定的索引值,相對於二分查詢節省了一次除法運算。

(可以看到,過程中不需要除以二或其他運算,直接從斐波那契數列中拿到下一個分割點)


參考資料

《Java程式設計與資料結構教程(第二版)》
《Java程式設計與資料結構教程(第二版)》學習指導