找出冒泡排序的时间复杂度?

时间:2016-12-11 20:33:22

标签: c algorithm

任何人都可以帮我找到以下冒泡排序功能的时间复杂度吗?我真的很难做到这一点。如果有人可以帮助我这将是非常有帮助的。以下是我的代码:

void bubble_sort ( int n )
{
    int i, j, k, temp ;
    struct link *p, *q ;
    k = n;
    for ( i = 0 ; i < n - 1 ; i++, k-- )
    {
        p = head ;//Sorting the linked list in descending order for displaying
        q = p ->next ;

        for ( j = 1 ; j < k ; j++ )
        {
            if ( p -> freq < q -> freq )//checking frequencies for sorting
            {
                temp = p ->freq ;
                p -> freq = q -> freq ;
                q -> freq = temp ;
            }
            p = p -> next ;
            q = q -> next ;
        }
    }//Sorted linked list
}

2 个答案:

答案 0 :(得分:2)

让我们计算一下操作次数:

  • 外部循环运行n-1

  • 对于每次迭代,内部循环运行n - i - 1次。

  • 大部分代码都在嵌套循环中:比较,交换操作和2个指针修改: O(1)时间。

总操作次数为(n *(n - 1)/ 2)* O(1)

因此上述代码的时间复杂度为 O(n 2

答案 1 :(得分:-1)

这似乎是一种经典的泡泡排序。 因此,在最坏情况和平均情况下,这是O(n²)。

了解更多信息:https://www.wikiwand.com/en/Bubble_sort#/Performance