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

}

}

代码链接


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



算法的复杂度 算法的复杂度 关于算法复杂度 各种算法复杂度 算法及其复杂度 什么是算法的复杂度? 关于算法复杂度 算法的复杂度: 算法的复杂度 算法和算法复杂度
 
粤ICP备14056181号  © 2014-2021 ITdaan.com