c - 求冒泡排序的时间复杂度?

标签 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
}

最佳答案

让我们计算一下操作数:

  • 外层循环运行 n-1

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

  • 大部分代码位于嵌套循环内:一次比较、一次交换操作和 2 次指针修改:O(1) 时间。

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

因此上述代码的时间复杂度为O(n2)

关于c - 求冒泡排序的时间复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41090847/

相关文章:

c - 如何在 C 中转储任意结构?

algorithm - 将工作与申请人匹配

algorithm - 使用基于整数除法的例程进行计数 - 是否有公式化方法?

algorithm - 与某种模式匹配的快速文件系统路径(但没有通配符)

string - 为给定的字符串生成最短的 NOT 子串

java - 试图找到整数数组元素的所有排列的集合

c - 写入和打印两个字符串交替组合时出现段错误?

c - 替换#defines常量

c - 0 和 1 的数组组合

c - 关于 glPixelStorei() 对齐的问题