我已经为气泡排序编写了这段代码。有人可以向我解释一下此过程的时间复杂度。它的工作类似于2 for循环。但还是要确认时间复杂度。
public int[] sortArray(int[] inpArr)
{
int i = 0;
int j = 0;
while(i != inpArr.length-1 && j != inpArr.length-1)
{
if(inpArr[i] > inpArr[i+1])
{
int temp = inpArr[i];
inpArr[i] = inpArr[i+1];
inpArr[i+1] = temp;
}
else
{
i++;
}
if(i==inpArr.length-1)
{
j++;
i = 0;
}
}
return inpArr;
}
答案 0 :(得分:1)
这将具有O(n ^ 2)的时间复杂度。实际上,这可能同时是O(n ^ 2)和theta(n ^ 2)。
看看代码的逻辑。您正在执行以下操作:
i=0
行),并增加j,然后重新启动过程。 / li>
这实际上确保了给定的数组将被循环两次,这意味着您将拥有最复杂的时间(大o或O(x)),时间复杂度为O(n ^ 2),但是给出了这段代码,您的平均(theta)时间复杂度将为theta(n ^ 2)。
在某些情况下,您可以具有n lg(n)的最佳情况(lambda),从而给出lambda(n lg *(n))时间复杂度,但是这种情况很少见而且我什至不确定此代码是否可以实现。
答案 1 :(得分:0)