Algorithm 以下排序函数的时间复杂度是多少?

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]) {

我为冒泡排序写了这段代码。有人能解释一下这段代码的时间复杂性吗。它的工作原理类似于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;
}
这将具有O(n^2)时间复杂度。实际上,这可能是O(n^2)和θ(n^2)

看看代码的逻辑。您正在执行以下操作:

  • 循环输入数组
  • 如果当前项大于下一项,则切换两项
  • 如果不是这样,增加索引(基本上检查下一项,因此递归地遍历步骤1-2)
  • 一旦您的索引是输入数组的长度-1,即它已穿过整个数组,您的索引将被重置(i=0行),j将增加,进程将重新启动
  • 这从本质上确保了给定的数组将循环两次,这意味着最坏情况下(大o或o(x))的时间复杂度为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