20172316 2017-2018-2 《程序設計與數據結構》實驗三報告

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


1.實驗內容

1

定義一個Searching和Sorting類,並在類中實現linearSearch(教材P162 ),SelectionSort方法(P169),最後完成測試。
要求很多於10個測試用例,提交測試用例設計狀況(正常,異常,邊界,正序,逆序),用例數據中要包含本身學號的後四位
提交運行結果圖。java

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) 補充排序方法。我補充了四個排序方法:冒泡排序、歸併排序、希爾排序以及插入排序3d


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

(1) 從基本原理上來看,斐波那契查找和二分查找幾乎沒有什麼不一樣,區別僅僅在於分割的位置不一樣,爲何會去選擇斐波那契查找?
二者貌似沒有什麼太大的不一樣,但實驗三(3)中提供的博客中提到,

(斐波那契查找在)最壞狀況下,時間複雜度爲O(log2n),且其指望複雜度也爲O(log2n)

而二分查找在

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

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

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


參考資料

《Java程序設計與數據結構教程(第二版)》 《Java程序設計與數據結構教程(第二版)》學習指導

相關文章
相關標籤/搜索