2011-11-13 9 views
4

のArrayとして扱われる最初のを比較するとき、私は失敗し、エラー「アレイとFixnumかの比較は(例外ArgumentErrorを)失敗した」取得しています私は、Rubyに新しいですし、ウィキペディアFixnumかは、Rubyの

に与えられたように私はmerge sort algorithmをしようとしていますマージメソッドの左と右の配列の要素。どのような理由があり、この問題を解決するにはどうすればよいですか?おかげで:)エラーがこれらのラインにある

def mergeSort(array) 
    if array.length == 1 
     return array 
    end 

    middle = array.length/2 - 1 
    left = array[0..middle] 
    right = array[middle+1..array.length-1] 

    left = mergeSort(left) 
    right = mergeSort(right) 
    merge(left,right) 
end 


def merge(left,right) 
    result = [] 
    while left.length > 0 || right.length > 0 
     if left.length > 0 && right.length > 0 
      one = left[0] 
      two = right[0] 
      puts ("one's class is #{one.class} two's class is #{two.class} two is #{two}") 
      if one <= two 
       result << left.shift 
      else 
       result << right.shift 
      end 
     elsif left.length > 0 
      result.push(left) 
      left = [] 
     else 
      result.push(right) 
      right = [] 
     end 
    end 
    puts "result is #{result}" 
    result 
end 
+0

「もし1つ<= 2」があなたのエラーを引き起こしていると言っていますか? –

+0

@muistooshortはい..それは私がエラーを取得しているところです – Pramod

答えて

5

elsif left.length > 0 
     result.push(left) 
     left = [] 
    else 
     result.push(right) 
     right = [] 
    end 

簡単な例は、理由を示す必要があります:代わりにpush()

irb(main):067:0> a=[1,2] 
=> [1, 2] 
irb(main):068:0> b=[3,4] 
=> [3, 4] 
irb(main):069:0> a.push(b) 
=> [1, 2, [3, 4]] 

を、concat()を試してみてください。

+1

ニース、それは結局、配列にFixnumとArrayが混在しているので、最終的に 'one <= two'でエラーを引き起こします。 –

+1

@mui:それはまさにそれです。テスト可能な完全なプログラムを投稿するために+10を設定すると、REPLループ内にエラーメッセージが表示されるようなものはありません。 :) – sarnold

+1

またはちょうどa + = bについて – pguardiario

関連する問題