合并排序的算法是
步骤1 - 如果列表中只有一个元素已经排序,则返回。 步骤2 - 将列表递归地分成两半,直到它不再被分割。 第3步 - 按排序顺序将较小的列表合并到新列表中。
使用此psedu代码:
procedure mergesort( var a as array )
if ( n == 1 ) return a
var l1 as array = a[0] ... a[n/2]
var l2 as array = a[n/2+1] ... a[n]
l1 = mergesort( l1 )
l2 = mergesort( l2 )
return merge( l1, l2 )
end procedure
procedure merge( var a as array, var b as array )
var c as array
while ( a and b have elements )
if ( a[0] > b[0] )
add b[0] to the end of c
remove b[0] from b
else
add a[0] to the end of c
remove a[0] from a
end if
end while
while ( a has elements )
add a[0] to the end of c
remove a[0] from a
end while
while ( b has elements )
add b[0] to the end of c
remove b[0] from b
end while
return c
end procedure
我的问题是:
在合并函数中,有两个while循环来检查a
和b
是否还有项目并将它们添加到c
数组。< / p>
我的问题是(可能)这两个 whiles 会在同一个函数中执行吗?
或者如果a
仍有项目,则表示b
肯定是空的,反之亦然?
答案 0 :(得分:1)
没有。如果它们都不是第一个,那么条件就是真的。
第一次完成后,a,b中至少有一个是空的。