我有这个问题,我很困惑,已经工作了一段时间,我似乎找不到任何帮助。
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
此算法会终止吗?
我有答案,因为[i]和[j]永远不会交换。
该算法在O-notation中的最坏情况时间复杂度是什么作为排序问题的大小的函数?
此算法的前提条件是真值TRUE。算法的期望后置条件是:for i ˂ j, a[i] ˂ a[j], for i = 1, 2, . . . , n-1, j = 2, . . . , n
找到内部和外部循环的两个循环不变量,如果算法终止,您认为这将导致所需的后置条件。
任何帮助将不胜感激!我想明白这一点!
答案 0 :(得分:0)
我建议您先阅读此内容:http://en.wikipedia.org/wiki/Bubble_sort
关于你的问题。
1)是的,算法肯定会终止。它将完成双循环并完成。
2)最差的复杂性是O(n ^ 2)。
3)研究并写下来:http://en.wikipedia.org/wiki/Loop_invariant。所以不会完成你的整个作业。