20172328 2018-2019-1《程序設計與數據結構》實驗三:查找與排序

20172328 2018-2019-1《程序設計與數據結構》實驗三:查找與排序

  • 課程:《軟件結構與數據結構》
  • 班級: 1723
  • 姓名: 李馨雨
  • 學號:20172328
  • 實驗教師:王志強老師
  • 實驗日期:2018年11月19日-2018年11月25日
  • 必修選修: 必修html

    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個)測試實現的算法(正常,異常,邊界),提交運行結果截圖。
  • 實驗5:
    • 編寫Android程序對各類查找與排序算法進行測試,提交運行結果截圖,推送代碼到碼雲。

2、實驗過程及結果

  • 實驗1的解決過程及結果
  • 實驗1比較簡單,代碼以前也實現過了,就直接作了測試用例,測試用例分爲如下幾種:
  • 查找正常
  • 找不到f的異常狀況
  • 越界異常
  • 空指針異常
  • 排序正常
  • 排序的空指針異常
  • 排序的邊界測試
    java

  • 實驗2的解決過程及結果
  • 實驗二在IDEA上很好實現,只是移動了包,從新編譯而已,可是在虛擬機上就不太好實現了。當時遇到了一些問題,可在第三部分詳細瞭解。
  • IDEA上運行截圖

  • 虛擬機命令行上運行截圖


    linux

  • 實驗3的解決過程及結果
  • Searing算法中又添加了一些查找算法。順序查找法、二分查找、插值查找、樹表查找、分塊查找、哈希查找、斐波那契查找法。其中有些算法的實現仍是須要多多思考,在編寫的時候也遇到了一些問題。

    算法

  • 實驗4的解決過程及結果
  • 增長了冒泡排序、插入排序、希爾排序、堆排序、歸併排序、快速排序。



    數據結構

  • 實驗5的解決過程及結果
  • 實驗5讓我去回顧了AS的一些使用,再把已經編寫好代碼放入便可完成。
  • 我用了一個應用程序,設置了兩個Activivty,在第一個界面上設置了跳轉到第二個界面的按鈕。


    函數

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

  • 問題:在作實驗2的時候,要在linuxBash上使用命令行,可是本身已經忘記的差很少了;查了好些資料,勉強作的還算順利,而後仍是提示報錯了,應該是在虛擬機上沒有junit安裝包的問題。

  • 解決辦法:命令行的命令本身忘記了許多,經過回憶和查詢本身上學期的博客,看了一些截圖,才又熟悉了VI編輯命令。由於時間緊迫,從新編寫了一個main函數來測試兩個類,可是符合題目要求,最終在命令行上運行成功。
    學習

  • 問題:作希爾排序的時候思路有點不清楚,寫了好幾回都不太對。
  • 解決及辦法:看了一些博客,總結了一點心得就是:希爾排序就是將數字序列按照必定的間隔分紅許多個子序列,在子序列中進行插入排序,而後在合併成一個數字序列;而後再去減少間隔長度,周而復始,最終等到間隔爲1的時候就實現了有序。

    實現的代碼以下:
public static void ShellSort(int[] data)
    {
        int m = 0;
        int temp = 0;
        //  每次將步長縮短爲原來的一半
        for (int gap = data.length / 2; gap > 0; gap =gap/2)
        {
            for (int i = gap; i < data.length; i++)
            {   //temp保存索引爲初始gap的值
                temp = data[i];
                //從i開始,
                for (m = i; m >= gap; m = m-gap)
                {  //將按步長分好的同組元素進行比較
                    if(temp < data[m - gap])
                    {//升序
                        data[m] = data[m - gap];
                    }
                    else
                    {
                        break;
                    }
                }
                data[m] = temp;
            }

        }
    }

其餘(感悟、思考等)

  當遺忘太快,歇一歇奔跑的腳步,看看本身留下來了什麼很重要!測試

  此次實驗的不少內容讓我以爲本身對之前的學習積累有些失望,由於遺忘的太快了,有些東西仍是掌握的不深入,還需努力纔好。命令行

4、參考資料

相關文章
相關標籤/搜索