算法复杂度-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个整数,输出其中的最大和最小元素。
解析:
- 算法复杂度为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]);
}
}