4

私はRubyが初めてで、ウィキペディアにあるマージソートアルゴリズムを試しています

マージ メソッドで左右の配列の最初の要素を比較すると、「Fixnum と Array の比較に失敗しました (ArgumentError)」というエラーが発生します。この問題の原因と解決方法を教えてください。ありがとう :)

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
4

1 に答える 1

5

エラーは次の行にあります。

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

簡単な例は、理由を示す必要があります。

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]]

の代わりにpush()、 を試してくださいconcat()

于 2011-11-13T08:51:02.833 に答える