这部分代码会在合并排序中执行吗?

时间:2016-04-16 17:09:07

标签: java algorithm sorting merge mergesort

合并排序的算法是

  

步骤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循环来检查ab是否还有项目并将它们添加到c数组。< / p>

我的问题是(可能)这两个 whiles 会在同一个函数中执行吗?

或者如果a仍有项目,则表示b肯定是空的,反之亦然?

1 个答案:

答案 0 :(得分:1)

没有。如果它们都不是第一个,那么条件就是真的。

第一次完成后,a,b中至少有一个是空的。