Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 冒泡排序算法的时间复杂度如何导致计算方式为O(n^2)?_Algorithm_Sorting_Big O_Bubble Sort - Fatal编程技术网

Algorithm 冒泡排序算法的时间复杂度如何导致计算方式为O(n^2)?

Algorithm 冒泡排序算法的时间复杂度如何导致计算方式为O(n^2)?,algorithm,sorting,big-o,bubble-sort,Algorithm,Sorting,Big O,Bubble Sort,我理解为什么冒泡排序是O(n^2) 然而,在许多解释中,我看到了如下情况: (n-1) + (n-2) + (n-3) + ..... + 3 + 2 + 1 Sum = n(n-1)/2 你如何计算这部分的总和 (n-1) + (n-2) + (n-3) + ..... + 3 + 2 + 1 有人能帮忙吗?这里有个窍门: If n is even: n + (n-1) + (n-2) + … + 3 + 2 + 1 = [n + 1] + [(n-1) + 2] + [(n-2) +

我理解为什么冒泡排序是O(n^2)

然而,在许多解释中,我看到了如下情况:

(n-1) + (n-2) + (n-3) + ..... + 3 + 2 + 1
Sum = n(n-1)/2
你如何计算这部分的总和

(n-1) + (n-2) + (n-3) + ..... + 3 + 2 + 1
有人能帮忙吗?

这里有个窍门:

If n is even:
  n + (n-1) + (n-2) + … + 3 + 2 + 1
= [n + 1] + [(n-1) + 2] + [(n-2) + 3] + … + [(n - (n/2 - 1)) + n/2]
= (n + 1) + (n + 1) + (n + 1) + … + (n + 1)
= n(n+1)/2

If n is odd:
  n + (n-1) + (n-2) + … + 3 + 2 + 1
= [n + 1] + [(n-1) + 2] + [(n-2) + 3] + … + [(n - (n-1)/2 + 1) + (n-1)/2] + (n-1)/2 + 1
= (n+1) + (n+1) + (n+1) + … + (n+1) + (n-1)/2 + 1
= (n+1)(n-1)/2 + (n-1)/2 + 1
= (n^2 - 1 + n - 1 + 2)/2
= (n^2 + n)/2
= n(n+1)/2
对于您的情况,由于您的计数是n-1而不是n,因此在本公式中,将n替换为(n-1),并简化:

   x(x+1)/2, x = (n-1)
=> (n-1)((n-1)+1)/2 
 = (n-1)(n)/2 
 = n(n-1)/2
在不推导方程式的情况下,最简单的“证明”是将复杂性想象为面积:

如果我们有顺序:

n+(n-1)+(n-2)...
我们可以从中创建一个形状。。。让我们考虑<代码> n=5 < /代码>:

n     5     *****
n-1   4     ****
n-2   3     ***
n-3   2     **
n-4   1     *
现在当你看起点时,它们形成一个直角三角形,有两条等长的边。。。这是
nxn
平方的一半,因此面积为:

area = ~ n.n / 2 = (n^2)/2
在复杂性中,常数没有意义,因此复杂性为:

O(n^2)

这是n个连续整数之和的证明:这是一个数学问题。