Algorithm 以下排序函数的时间复杂度是多少?
我为冒泡排序写了这段代码。有人能解释一下这段代码的时间复杂性吗。它的工作原理类似于2 for循环。但还是要用时间复杂性来证实Algorithm 以下排序函数的时间复杂度是多少?,algorithm,sorting,time-complexity,Algorithm,Sorting,Time Complexity,我为冒泡排序写了这段代码。有人能解释一下这段代码的时间复杂性吗。它的工作原理类似于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]) {
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;
}
这将具有O(n^2)时间复杂度。实际上,这可能是O(n^2)和θ(n^2)
看看代码的逻辑。您正在执行以下操作:
在某些情况下,您可以使用nlg(n)的最佳情况(lambda),给出lambda(nlg*(n))时间复杂度,但这种情况很少见,我甚至不确定使用此代码是否可以实现。您的时间复杂度是
O(n^2)
作为最坏情况和O(n)
作为最佳情况。您的平均方案仍然执行O(n^2)比较,但交换次数将少于O(n^2)。这是因为您实际上做的事情与使用两个for
循环相同。如果您对算法效率感兴趣,我建议您查看这种类型的已有库。从事这类工作的计算机科学家真的很紧张。Java的Arrays.sort()
方法基于一个名为的Python项目,该项目基于合并排序。气泡排序的缺点是,对于大型无序阵列,它的效率非常低。阅读更多。感谢Furkan提出的建议O(n)作为最佳案例
建议输入,所需迭代次数少于n^2次。没问题。如果您认为这是一个好答案,请将其投票并标记为正确,以便其他用户可以从您的问题中受益。如果确实回答了您的问题,请标记此答案为正确答案为什么其他
?它所做的只是在进行交换时引起循环的额外迭代。您应该去掉else
,并无条件地递增i
。