zoukankan      html  css  js  c++  java
  • 算法复杂度3

    算法复杂度3

    题目

    用 Java语言实现下列算法并进行单元测试, 请给出算法的时间复杂度。
    (1)求一个整数二维数组Arr[N][N]的所有元素之和。
    (2)对于输入的任意 3 个整数, 将它们按从小到大的顺序输出。
    (3)对于输入的任意 n 个整数, 输出其中的最大和最小元素。
    
    

    第一题

    • 使用一个双循环的结构来遍历数组,并将它们相加,每个循环n次相乘复杂度就是n^2;

    两种代码

    • 产品代码
    package ClassTest;
    public class ArraySum {
        public int Sum (int[][] a){
            int sum = 0;
            for (int i = 0;i < a.length;i++){
                for (int j = 0; j < a[i].length;j++){
                    sum = sum + a[i][j];
                }
            }
            return sum;
        }
    }
    
    package ClassTest;
    
    import org.junit.Test;
    
    import static org.junit.Assert.*;
    public class ArraySumTest {
    
        ArraySum arraySum = new ArraySum();
        @Test
        public void sum() throws Exception {
            int [][] a = {{1,1},{2,2},{3,3}};
            int [][]b = null;
            assertEquals(12,arraySum.Sum(a));
        }
    
    }
    

    第二题

    • 用到了Swap这个小方法,因为数组中元素被限定为3所以比较的次数有限,是一个常数所以算法复杂度为O(1);

    两种代码

    • 产品代码
    package ClassTest;
    public class NumberSort {
        public int [] sort (int[]a){
            if (a.length == 3){
               if (a[0] > a[1]){
                   swap(a,a[0],a[1]);
               }
               if (a[1]> a[2]){
                   swap(a,a[1],a[2]);
                   }
    return a;
        }
        else
            return null;
        }
        private static void swap (int[] data, int index1, int index2)
        {
           int temp = data[index1];
            data[index1] = data[index2];
            data[index2] = temp;
        }
    
    }
    
    package ClassTest;
    
    import org.junit.Test;
    
    import static org.junit.Assert.*;
    public class NumberSortTest {
        int[] a = {10000,156523,4879};int[] a1 ={4879,10000,156523};
        int [] b = {123,45689,1414,1};
        @Test
        public void sort() throws Exception {
            NumberSort sort = new NumberSort();
            assertEquals(a1,sort.sort(a));
            assertEquals(null,sort.sort(b));
    
        }
    
    }
    

    第三题

    • 参照选择排序,查找最大值和最小值,两个方法每个方法运行n次,相加算法复杂度就是O(n);

    两种代码

    • 产品代码
    package ClassTest;
    public class NumberChoose {
        public int min (int [] data){
            int min = data[0];
    
            for (int index = 0; index < data.length; index++)
    
            {
                    if (min >= data[index])
                        min = data[index];
            }
            return min;
        }
        public int max (int [] data){
    
            int max = data[0];
            for (int index = 0; index < data.length; index++)
            {
                if (max <= data[index])
                    max = data[index];
            }
            return max;
        }
    
    }
    
    package ClassTest;
    import org.junit.Test;
    import static org.junit.Assert.*;
    public class NumberChooseTest {
        NumberChoose sort = new NumberChoose();
        @Test
        public void sort() throws Exception {
            int [] a = {12,26,23,48,59,46};
            int [] b = {12,12,12,12,12};
            assertEquals("没有成功",59,sort.max(a));
            assertEquals("没有成功",12,sort.min(a));
            assertEquals("没有成功",12,sort.max(b));
            assertEquals("没有成功",12,sort.min(b));
    
        }
    
    }
    

    代码链接

  • 相关阅读:
    html5 File api 上传案例
    DOM操作
    箭头函数
    js 高级函数
    导入导出封装
    函数
    哲学/文学
    qtMd5 加密算法
    生活感悟
    C# 小技巧
  • 原文地址:https://www.cnblogs.com/CHUNWANG/p/7588114.html
Copyright © 2011-2022 走看看