如果最后的交互被解除,为什么冒泡的大O会排序Quadradic时间?

时间:2018-06-10 02:05:32

标签: c# big-o bubble-sort asymptotic-complexity

我有以下冒泡排序算法:

    public void BubbleSort(int[] arr, int start, int end)
    {
        int instructions = 0;
        bool swapped = true;

        while (swapped)
        {
            swapped = false;
            for (int i = 0; i < arr.Length - 1; i++)
            {
                //instructions++;
                for (int j = i + 1; j < arr.Length; j++)
                {
                    instructions++;
                    if (arr[i] > arr[j])
                    {
                        int temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;

                        swapped = true;
                    }
                }
            }
        }

        Console.WriteLine("instructions++ " + instructions);
    }

如果你打印instructions,你会看到它正是:(n ^ 2) - n

那么为什么我们不理会-n?

它是否被认为是常量,即使它对输入大小是可变的(这会很奇怪,买嘿......)?

1 个答案:

答案 0 :(得分:2)

时间强制就是这样。对于这种情况下的大n值,线性n无关紧要。例如,如果我们谈论的是1000万个数字,则值(10 ^ 6)^ 2远大于10 ^ 6。因此,即使它存在,另一个因素也会使大型n相形见绌,因此更容易忽视它。