算法复杂度

算法复杂度-1

题目:有以下用Java语言描述的算法,说明其功能并计算复杂度,注意:时间结束后的回答无效

double fun(double y,double x,int n)
{
    y=x;
    while(n>1)
    {
        y=y*x;
        n--;
    }
    return y;
}

解析:功能是计算x的n次方并返回,复杂度为O(n)

算法复杂度-2

设n为正整数,给出下列3个算法关于问题规模n的时间复杂度

题目1:

1) 算法1
void fun1(int n)
{
    i=1,k=100;
    while (i<=n)
    {
        k=k+1;
        i+=2;
    }
}

解析:算法复杂度为O(n)

题目2:

2) 算法2
void fun2(int b[], int n)
{
    int i,j,k.x;
    for(i=0;i<n-1;i++)
    {
     k=i;
     for(j=i+1;j<n;j++)
     if (b[k]>b[j]) k=j;
     x=b[i];
     b[i]=b[k];
     b[k]=x;
    }
}

解析:算法复杂度为O(n^2)

题目3:

void fun3(int n)
{
    int i=0,s=0;
    while (s<=n)
    {
        i++;
        s=s+i;
    }
}

解析:O(n^(1/2))

算法复杂度-3

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

解析:

  1. 算法复杂度为O(n^2)
public class SumArray{
public static void main(String[] args) {
int array[][] = {{2,3,2},{2,4,6},{6,8,9}};
   SumArray arr = new SumArray();
   int a = arr.sumArray(array);
   System.out.println(a);
}
public int  sumArray(int array[][]){
    int sum = 0;
    for (int i = 0; i < array.length ; i++) {

        for (int j = 0; j < array[i].length; j++) {
            sum = sum + array[i][j];
        }
    }
    return sum;

}
}

2)第二、三问可用同样的代码写出,方法为选择排序。

public class sort {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入需要多少个数: ");
int a = scan.nextInt();
int arr[] = new int[a];
System.out.println("请输入"+ a +"个整数:");
for(int i=0 ; i<a; i++){
    arr[i]= scan.nextInt();
}
   int arr1[] = selectionsort.selectionSort(arr);
    System.out.println("排序后的数组为");
    for(int j =0; j<a;j++){

        System.out.println(arr1[j]);
    }

    System.out.println("最大值为:" + arr1[a-1]);
    System.out.println("最小值为:" + arr1[0]);
}
}

posted @ 2017-12-16 15:18  林臻  阅读(1710)  评论(0编辑  收藏  举报