算法复杂度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) 编辑 收藏 举报