我想分析下面程序的执行时间复杂性。 请回答说明。
private static void printSecondLargest(int[] arr) {
int length = arr.length, temp;
for (int i = 0; i < 2; i++) {
for (int j = i+1; j < length; j++) {
if(arr[i]<arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println("Second largest is: "+arr[1]);
}
答案 0 :(得分:3)
它是O( n ),其中 n 表示数组的长度。
最内圈的身体:
if(arr[i]<arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
在恒定的时间内运行。
此代码将首先执行arr.length-1
次,然后执行arr.length-2
次。那是2 * arr.length - 3
。因此,执行时间与2n-3成正比,即O( n )。
答案 1 :(得分:1)
显然是O(n)。外循环仅运行2次,内循环运行N次。因此,总体复杂度为O(2 * n)。
答案 2 :(得分:0)
外循环将运行两次,内循环运行(长度为1),第二次运行(长度为2)
假设长度为N
so it will be 2*((N-1)/2+(N-2/)2)==2*(2n-3)/2
Which is final (2N-3) and in O notation it is O(N)
答案 3 :(得分:0)
private static void printSecondLargest(int[] arr) {
int length = arr.length, temp; // **it takes contant time**
for (int i = 0; i < 2; i++) { // as loop goes only two step it also takes constant time
for (int j = i+1; j < length; j++) { // this loop takes n time if we consider arr length of size n
if(arr[i]<arr[j]) {
temp = arr[i]; // it also takes constant time
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println("Second largest is: "+arr[1]);
}
因此,按照上述计算,我们忽略了恒定时间并计算所有变化时间约束,并且根据代码复杂度将为O(n)
。