algorithm - 冒泡排序算法分析

标签 algorithm sorting big-o bubble-sort

通常,buublesort 的运行时间复杂度为 O(n^2),但下面给出的算法有一个 while 循环和一个 for 循环,for 循环取决于 n,但 while 循环只是 bool 值的检查器。谁能告诉我如何计算该算法的运行时间?

bool done;
done = false;
while ( ! done )
{
done = true;
for ( i = 0 ; i < a.length-1 ; i ++ )
     {
     if ( a[i] > a[i+1] )
     {

// Swap a[i] and a[i+1]

    temp = a[i];
    a[i] = a[i+1];
    a[i+1] = temp;

    done = false;
  }
 }
}

最佳答案

这种情况比具有两个 for 循环的算法要难得多,因为外循环的确切迭代次数不仅取决于 N,还取决于数据的特定排列。

如果数组最初是排序的,则根本不会有交换,外层循环将只运行一次,复杂度为 O(N)

如果数组最初是反向排序的,则每次比较都会引起交换,并且外层循环将执行 N 次,总复杂度为 O(N²)

一般情况更难评估,因为它取决于被置换元素的数量。可以证明(通过一个重要的数学论证)对于随机排列的数组,平均复杂度仍然是 O(N²)

关于algorithm - 冒泡排序算法分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28810712/

相关文章:

algorithm - 随机排列

python - 在python中选择排序算法

java - 如何实现归并排序?

python - 根据来自 redis 的排序集的排序排序 Django 查询集

java - 在 Java 的 HashSets 上使用方法 retainAll 的时间和空间复杂度是多少?

algorithm - 使用 3 个数组的双向链表

algorithm - 如何让波形渲染更有趣?

algorithm - 当数据项传入而不是已经存在时比较排序算法

java - Arrays.sort 和 for 循环之后的复杂性

algorithm - 用 log n 求解主定理 : T(n) = 2T(n/4) + log n