Worst Case Big O运行时

时间:2015-02-21 21:27:07

标签: big-o time-complexity

根据n,有人可以帮助我找到以下算法的最坏情况的大O运行时间吗?

// precondition: A contains only positive numbers
public int[] four(int A[])
{
    int n=A.length;
    int[] B = new int[n];
    int max;
    for (int k=n-1; k >= 0; k--) {
        max = findMax(A);  //call to findMax above
        B[k]=A[max];
        A[max]=-1;
    }
    return B; 
}

2 个答案:

答案 0 :(得分:0)

// precondition: A contains only positive numbers
public int[] four(int A[])
{
    int n=A.length; //constant operation
    int[] B = new int[n]; //constant operation
    int max; //constant operation
    for (int k=n-1; k >= 0; k--) { //iterates through n times
        max = findMax(A);  //call to findMax above //will take complexity of O(n) assuming A is scrambled, 
        B[k]=A[max]; //constant operation
        A[max]=-1; //constant operation
    }
    return B; //constant operation 
}

这个整个操作将花费O(n ^ 2)时间,因为循环运行O(n)次,内部操作将O(n)的时间复杂度完成,假设findmax()将取O(n) )在A []是加扰数组

的情况下通常是这样的

这本身看起来是使用2个数组的选择排序。

答案 1 :(得分:0)

代码的复杂性取决于findMax()的复杂程度。

当算法计算从n-10一次时,时间复杂度为O(n⋅f(n)),其中f(n)findMax()的复杂度。< / p>

A因为你正在对它进行排序而被认为是未分类的。因此findMax()可能是线性搜索,其复杂度为O(n)

因此整体复杂度为O(n²)