实验3

实验一

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

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

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

实验截图:

实验二

要求:重构你的代码

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

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

实验截图:

实验三

要求:参考 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;
		}

实验截图:

实验四

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

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

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

希尔排序:

堆排序:

// 堆排序
    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;
                }
            }
        }
    }

桶排序:

二叉树排序 :

实验截图:

posted @ 2017-11-10 11:56  20162312张家铖  阅读(220)  评论(2编辑  收藏  举报