这个计划的复杂性是什么?

时间:2015-02-18 11:13:57

标签: java algorithm data-structures big-o asymptotic-complexity

我想分析下面程序的执行时间复杂性。 请回答说明。

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]);
}

4 个答案:

答案 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)