algorithm - 冒泡排序算法题

标签 algorithm time-complexity

我有一个很困惑的问题,已经研究了一段时间,但似乎找不到任何帮助。

input a: array [1 .. n] of integer; n : integer;
temp  i, j : integer;
j <-- n;
while j ≥ 1
    do   I <-- 1;
        while   i ˂ j
            do
                if  a[i] ˃ a[j]  then swap a[i], a[j];
                i <-- i + 1;
            od;
        j < j – 1;
    od  
  1. 这个算法会终止吗?

    我的答案是不,因为 a[i] 和 a[j] 永远不会交换。

  2. 此算法的最坏情况时间复杂度(以 O 表示法作为排序问题大小的函数)是多少?

  3. 该算法的前提条件是真值TRUE。该算法所需的后置条件是:for i ˂ j, a[i] ˂ a[j], for i = 1, 2, . . . , n-1, j = 2, . . . , n

找到您认为在算法终止时会导致所需后置条件的内循环和外循环的两个循环不变量。

任何帮助将不胜感激!我想明白这一点!

最佳答案

我建议您先阅读以下内容:http://en.wikipedia.org/wiki/Bubble_sort

关于你的问题。

1) 是的,算法肯定会终止。它将执行双循环并完成。

2) 最差的复杂度是 O(n^2)。

3)研究并记下:http://en.wikipedia.org/wiki/Loop_invariant .所以不会做你的全部作业。

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

相关文章:

c++ - 具有指定最小长度的线性时间最大连续子序列求和算法

python - 给定一个以米为单位的面积,重复移除最大的正方形

java - 使用 TreeMap 查找最大元素

php - 向数组添加元素的时间复杂度是多少?

python - Python 如何如此快速地从列表中删除元素?

.net - 这些算法中哪一个在生成 1..n 范围内的 N 个唯一随机数的性能和顺序方面更好?

algorithm - hackerrank偶数树解法讲解(偶数节点的森林)

java - 在java中分割包含@PathVariable和@QueryParameter的URL

list - haskell 函数的时间复杂度

algorithm - T(n) = T(n/2) + T(n/4) 使用迭代法求解这个递归