讓我們使用Wikipedia的代碼。你需要指望分裂的部分。拆分在merge_sort(list m)
中進行。您需要添加計數器作爲輸入參數(var count
),請參閱下文。該計數器必須是count=0
。每次方法被調用和列表lenght>0
,那麼您可以通過1
function merge_sort(list m, var count)
// Count here
if(length(m))>0
count++;
// if list size is 0 (empty) or 1, consider it sorted and return it
// (using less than or equal prevents infinite recursion for a zero length m)
if length(m) <= 1
return m
// else list size is > 1, so split the list into two sublists
var list left, right
var integer middle = length(m)/2
for each x in m before middle
add x to left
for each x in m after or equal middle
add x to right
// recursively call merge_sort() to further split each sublist
// until sublist size is 1
left = merge_sort(left,count)
right = merge_sort(right,count)
// merge the sublists returned from prior calls to merge_sort()
// and return the resulting merged sublist
return merge(left, right)
function merge(left, right)
var list result
while length(left) > 0 or length(right) > 0
if length(left) > 0 and length(right) > 0
if first(left) <= first(right)
append first(left) to result
left = rest(left)
else
append first(right) to result
right = rest(right)
else if length(left) > 0
append first(left) to result
left = rest(left)
else if length(right) > 0
append first(right) to result
right = rest(right)
end while
return result
增加計數器對於需要調用這樣merge_sort([38,27,43,3,9,82,10], 0)
僞代碼維基百科的例子。
那麼如果你給出的是將要調用的函數的類型,你會不會採取歸併(n的O(N)* logBASE2(N ))和多個指定晴雨表指定運算符的實例數。或者你的方法是否必須包含任何遞歸類型? – SGM1 2013-03-10 21:22:27
有道理。我想...我現在知道繼續。晴雨表操作員將在「<」進行實際比較。並且這個運算符被兩個方法遞歸地調用(n/2)次,這兩個方法分割列表,然後主合併操作恰好發生(n-1)次。因此,求解求和方程後給出(nlog(n)+ c)Thanks @ SGM1 – SRJ 2013-03-10 21:37:08