算法复杂度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));

    }

}

代码链接

posted on 2017-09-24 20:43  20162324-春旺  阅读(182)  评论(0编辑  收藏  举报

导航