2016-04-04 8 views
-1

クイックソートのコードを記述しました。私は私のソート方法のエラーを取得していますが、問題がどこにあるか私には表示されませんRubyでのクイックソートの実装

def sort (numbers, first, last) 
if first >= last 
    return 
end 

if first < last 
    pivot = first 
    j = first 
    k = last 

    while (j < k) 
     if(numbers[j] >= numbers[pivot]) 
      j +=1 
      if(numbers[k] < numbers[pivot]) 
       k -=1 
       if(j <= k) 
        temp = numbers[j] 
        numbers[j] = numbers[k] 
        numbers[k] = temp 
       end 
      end 
     end 
    end 
    puts "end loop" 
    temp = numbers[pivot] 
    numbers[pivot]= numbers[k] 
    numbers[k] = temp 
    sort(numbers,first,k-1) 
    sort(numbers,k+1,last) 
end 
end 

a = [89, 23, 12, 67, 45, 78, 24, 56, 87, 73, 37] 
first = 0 

for i in 0...a.length 
puts a[i] 
end 

last = a.length - 1 
puts "Array Count is #{last}" 

sort(a, 0, last) 

for i in 0...a.length 
puts a[i] 
end 

エラー:sort': undefined method + @」nilのために:NilClass(NoMethodError) は、誰もがこのエラーが

が何であるかについて教えてもらえます
+2

開始するには、 'j ++'を 'j + = 1'と' k - 'を' k- = 1'に置き換えてください。 [rubyに++演算子がない理由](http://stackoverflow.com/questions/3660563/why-doesnt-ruby-support-i-or-i-increment-decrement-operators) –

+0

私はkが1またはリストの長さのときに起こるように、あなたのサブリストの1つが空であると思われます。 – Octopus

+1

行番号とバックトレースを含むエラーの全文を入力してください。私が知っているのは、あなたがどこにもない値に追加しようとしているところです。また、[mcve]を提供してください。 – Shelvacu

答えて

0

まず、あなたのコードは私のコンピュータで動作しています(++オペレータではエラーがほとんどありません)。ファイルをどのように実行しているかには問題があるはずです。 第2に、コードはRubyコードのようには見えません(Rubyには++演算子がありません)。 Quick Sort

+0

'j ++'と '' k- '? –

+0

これはコメントであり、答えではありません。 –

+0

j ++をj + = 1に置き換え、kと同じにしましたが、「配列数が10」の後に実行すると、ハング状態になります。 Ctrl + Cを押してプログラムを終了する必要があります –

関連する問題