根据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;
}
答案 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-1
到0
一次时,时间复杂度为O(n⋅f(n))
,其中f(n)
是findMax()
的复杂度。< / p>
A
因为你正在对它进行排序而被认为是未分类的。因此findMax()
可能是线性搜索,其复杂度为O(n)
。
因此整体复杂度为O(n²)
。