冒泡排序的算法分析

时间:2017-08-30 16:14:35

标签: algorithm time time-complexity bubble-sort

给出冒泡排序的以下程序(伪代码),我正在尝试计算Ω符号。

procedure BUBBLE_SORT(A,n) {
    array A(1 to n)
    for (int i = 1; i <= n; i++) {
        for(int j = 1; j <= n-1; j++) {
            if(A[j] > A[j+1] {
                //swap(A(j), A(j+1))
            }
        }
    }
}

for(int i = 1; i&lt; = n; i ++)|| C1 = n + 1(因为它仍然检查它何时为假)

for(int j = 1; j&lt; = n-1; j ++)|| C2 =(n)(n + 1)(因为它是嵌套的,所以你加倍n + 1)

if(A [j]> A [j + 1])|| C3 = 1

这会给我:

C1(n + 1)+ C2(n ^ 2 + n)+ C3

这不等于Ω(n ^ 2)吗?但我知道对于冒泡排序,它应该是Ω(n)(如果列表已经排序)。

我的计算有什么问题?

谢谢!

1 个答案:

答案 0 :(得分:2)

它在Ω(n)中,因为最好的情况是元素已经排序,其中Ω(n)表示复杂性的下限。

void bubbleSort(int arr[], int n)
{
   int i, j;
   bool swapped;
   for (i = 0; i < n-1; i++)
   {
     swapped = false;
     for (j = 0; j < n-i-1; j++)
     {
        if (arr[j] > arr[j+1])
        {
           swap(&arr[j], &arr[j+1]);
           swapped = true;
        }
     }

     // IF no two elements were swapped by inner loop, then break
     if (swapped == false)
        break;
   }
}

如果我们使用上面的代码,我们可以看到我们可以检查交换是否发生,如果没有发生交换,这意味着它已经被排序,因此我们可以在1次迭代中打破循环