算法復雜度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-2020 ITdaan.com