实验3

实验一

要求:完成教材P302 Searching.Java ,P305 Sorting.java中方法的测试

不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位

实验思路:这些代码之前作业就写过,只是改了部分测试用例,没有什么问题。

实验截图:1062727-20171110112521091-1915870499.png

1062727-20171110112524841-1354755920.png

实验二

要求:重构你的代码

把Sorting.java Searching.java放入 cn.edu.besti.cs1623.(姓名首字母+四位学号) 包中
把测试代码放test包中
重新编译,运行代码

实验思路:我的命令行出现了些问题,总是出现非法字符,最后我把代码拷到同学的电脑上重构运行截图。

实验截图:1062727-20171110112739888-820280665.png

实验三

要求:参考 http://www.cnblogs.com/maybe2030/p/4715035.html 在Searching中补充查找算法并测试

实验思路:这个实验的主要问题是斐波那契数列的实现,从第三位开始的数字是它前两位的和,随着元素个数增多越来越接近需要的黄金比例,参考代码实现:

        /* 输出:9 */
        static int FibonacciSearch(int [] a, int n, int key){
            int [] F = {0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987};
            int low, high, mid, i, k;
            low = 1;
            high = n;
            k = 0;
            while (n > F[k]-1) /* 计算n位于斐波那契数列的位置 */
                k++;
            
            while (low <= high) {
                mid = low + F[k-1] -1;
                if (key < a[mid]){
                    high = mid - 1;
                    k = k - 1;
                }
                else if (key > a[mid]){
                    low = mid + 1;
                    k = k - 2;
                }
                else {
                    if (mid <= n)
                        return mid;
                    else
                        return n;
                }
            }
            return 0;
        }

实验截图:1062727-20171110114344231-998402087.png

实验四

要求:补充实现课上讲过的排序方法:希尔排序,堆排序,桶排序,二叉树排序等

测试实现的算法(正常,异常,边界)

实验思路:堆排序、桶排序主要参考PPT里的代码,二叉树排序之前实现过二叉查找树,调出中序遍历即可,希尔排序我又回去看了一下之前的课件,加深了理解

希尔排序:

1062727-20171124175955671-1337993875.png

堆排序:
// 堆排序
    public static void heapSort(Integer[] data)
    {

        for (int i = 0; i < data.length; i++)
        {
            createMaxdHeap(data, data.length - 1 - i);

            sw(data, 0, data.length - 1 - i);

        }
    }

    public static void createMaxdHeap(Integer[] data, int lastIndex)
    {
        for (int i = (lastIndex - 1) / 2; i >= 0; i--)
        {

            int an = i;

            while (2 * an + 1 <= lastIndex) {

                int biggerIndex = 2 * an + 1;
                if (biggerIndex < lastIndex) {

                    if (data[biggerIndex] < data[biggerIndex + 1]) {

                        biggerIndex++;
                    }
                }
                if (data[an] < data[biggerIndex]) {

                    sw(data, an, biggerIndex);
                    an = biggerIndex;
                } else {
                    break;
                }
            }
        }
    }

    public static void heapSort2(int[] data)
    {
        for (int ch = 0; ch < data.length; ch++)
        {
            createMaxdHeap2(data, data.length - 1 - ch);
            swap(data, 0,data.length - 1 - ch );

        }
    }

    public static void createMaxdHeap2(int[] data, int lastIndex)
    {
        for (int i = (lastIndex - 1) / 2; i >= 0; i--)
        {

            int j = i;

            while (2 * j + 1 >= lastIndex) {

                int biggerIndex = 2 * j + 1;

                if (biggerIndex > lastIndex) {

                    if (data[biggerIndex] > data[biggerIndex + 1])
                    {

                        biggerIndex++;
                    }
                }
                if (data[j] < data[biggerIndex])
                {

                    swap(data, j, biggerIndex);
                    j = biggerIndex;
                } else {
                    break;
                }
            }
        }
    }
桶排序:

1062727-20171124180207421-475830355.png

二叉树排序 :

1062727-20171124180247984-1643442688.png

实验截图:1062727-20171110115522669-2107082577.png

转载于:https://www.cnblogs.com/1zhjch/p/7813890.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值