• 算法复杂度课后作业


    算法复杂度课后作业

    要求:

    用 Java语言实现下列算法并进行单元测试, 请给出算法的时间复杂度。

    (1)求一个整数二维数组Arr[N][N]的所有元素之和。

    (2)对于输入的任意 3 个整数, 将它们按从小到大的顺序输出。

    (3)对于输入的任意 n 个整数, 输出其中的最大和最小元素。

    解答:

    (1)要用到两个循环来做,第一个循环是列的,第二个循环是该列的第几个下标,然后将其累加,最后返回结果。用到两个循环,而且循环中的变量的增长为1。因此,第一个问题的时间复杂度是: O(n^2)

    (2)第二个只是排序,我用的是快速排序法来实现排序,按照正常情况,快速排序的时间复杂度为:O(n logn),但是只输入3个数,递归一次就结束了,所以时间复杂度为: O(1)

    (3)第三个直接可以用上第二问的排序先将数组顺序排好,然后将第一个和最后一个调出来就可以了。由于调出的时候时间复杂度都是O(1),因此第三问的时间复杂度和第二问的时间复杂度一样,是: O(n logn)

    实现代码: Task.java

    /**
     * Created by Funny_One on 2017/9/23.
     */
    public class Task {
        //求二元数组的和
       public int total(int[][] Arr) {
           int total = 0;
           for (int index = 0; index < Arr.length; index++) {
               for (int viceIndex = 0; viceIndex < Arr[0].length; viceIndex++) {
                   total += Arr[index][viceIndex];
               }
           }
           return total;
       }
    
       //对数组进行排序
        public void quickSort(int[]data,int min,int max){
            int pivot;
            if(min<max){
                pivot = partion(data,min,max);
                quickSort(data,min,pivot-1);
                quickSort(data,pivot+1,max);
            }
            for(int index=0;index<data.length;index++){
                System.out.println("  "+data[index]+"  ");
            }
           System.out.println();
        }
        private static int partion(int[] data,int min,int max){
            int partitionValue = data[min];
            int left = min ;
            int right = max;
    
            while (left<right){
                while (data[left] <= partitionValue && left<right){
                    left++;
                }
    
                while (data[right] > partitionValue){
                    right--;
                }
    
                if(left < right){
                    swap(data,left,right);
                }
    
            }
            swap(data,min,right);
            return right;
        }
    
        private static void swap(int[] data, int index1, int index2){
            int temp = data[index1];
            data[index1]= data[index2];
            data[index2]= temp;
        }
        
        public boolean judge(int[] data){
            boolean judge=false;
            for(int index=0;index<data.length-1;index++){
                if(data[index+1]>data[index]){
                    judge = true;
                }
            }
            return judge;
        }
    
        //获得数组的最大值和最小值
        public String Select(int[] arr){
            quickSort(arr,0,arr.length-1);
            return "Min Num in the array:"+arr[0]+" Max Num in the array:"+arr[arr.length-1];
        }
      
    
    }
    
    

    测试用例:TaskTest.java

    import junit.framework.Test;
    import junit.framework.TestCase;
    import junit.framework.TestSuite;
    
    /**
     * Created by Funny_One on 2017/9/23.
     */
    public class TaskTest extends TestCase {
        private static final String TEST_FAILURE_MSG = "test fail";
        public static Test suite(){
            TestSuite suite=new TestSuite("Task测试程序");
            suite.addTestSuite(TaskTest.class);
            return  suite;
        }
        Task t = new Task();
        public void testTotal() throws Exception {
            int[][] Arr = {{1,2,3}};
            assertEquals(errorMsgTitle("The total is 6"),6,t.total(Arr));
    
        }
    
        public void testQuickSort() throws Exception {
            int[]data = {1,5,9,3,7};
            t.quickSort(data,0,4);
            assertEquals(errorMsgTitle("get true"),true,t.judge(data));
        }
    
        public void testSelect() throws Exception {
            int[] arr = {5,6,9,10,3,2,8,7};
            assertEquals(errorMsgTitle("get the min and max"),"Min Num in the array:"+2+" Max Num in the array:"+10,t.Select(arr));
        }
    
        private String errorMsgTitle(String msg){
            return msg+" "+ TEST_FAILURE_MSG;
        }
    }
    

    测试效果:

  • 相关阅读:
    java安装jdk时,执行javac出错
    servlet入门
    maven安装出错原因分析
    备份整个schema的数据
    备份db2schema数据
    UltraEdit使用技巧
    获取数据库分组后的最大值
    什么是jsp
    linux 上使用FTP传输文件
    关于opencv进行rtsp取流播放视频特别慢的问题记录
  • 原文地址:https://www.cnblogs.com/VersionP1/p/7585843.html
Copyright © 2020-2023  润新知