0
任何人能告訴我是什麼在我的合併排序做錯了歸併排序在Ruby中
def print_array(a)
print a
print "\n\n"
end
#Merge-Sort code starts Here.
def merge_sort(a)
if a.size < 2
return a
end
middle = (a.length/2).to_i
left = a.slice(0, middle)
right = a.slice(middle, a.size)
merge_sort(left)
merge_sort(right)
a = merge(left, right)
end
def merge(left, right)
result = []
while left.length > 0 || right.length > 0
if left.length > 0 && right.length > 0
if left[0] <= right[0]
result << left.slice!(0)
else
result << right.slice!(0)
end
elsif left.length > 0
result.concat left.slice!(0..left.length-1)
elsif right.length > 0
result.concat right.slice!(0..right.length-1)
end
end
result
end
a = [ 3, 2, 1 ]
print_array(a)
a = merge_sort(a)
print_array(a)
基本上,我所知道的是,當談到時間合併[2]和[1],即(即返回[1,2]),但是對於遞歸的前一步,當它退回時,它返回(或不回來)爲[1,2]但是作爲[2 ,1],即。
上一頁步驟 - >左= [3] - >右= [2,1]是#此的權利從遞歸的,而不是值[1,2]
我不知道如何解決這個問題,這讓我瘋狂,你能幫我嗎?
哇,這很奇怪,我以爲我曾試過!但無論如何,很好的答案! – jlstr
巨大的感謝之人! – jlstr