ruby にてアルゴリズムのライブラリを製作すべくいろいろプログラムを書いています。
出来る限り書いてはみたのですが、結果が思うように出なかったり、エラーが出たりしています。
ソースは以下になりますが、真ん中の while 文の箇所( x[k] = buffer[i] や x[k] = x[j] 配列に値を代入する箇所にて) "[]= " : no implici conversion from nil to integer とエラーが出ます。
対策を教えてください。
(ソース)
ruby
1# Sort モジュール(クイックソートとマージソートの処理で構成) 2module Sort 3 4#merge_sort メソッド(マージソート) 5#引数 (n, x) = (配列の要素の数、ソートする配列) 6def self.merge_sort(n, x) 7 8 i, j, k, m = 0 9 10 if n <= 1 11 return 12 end 13 14 m = n / 2 15 16 buffer = x[m..(n - 1)] 17 18 # ブロックを前半と後半に分けてソート(再帰呼び出し) 19 merge_sort(m, x) 20 merge_sort(n - m, buffer) 21 22 # x の前半を x の後半にコピー 23 x[(n - m)..(n - 1)] = x[0..(m - 1)] 24 25 j = n - m 26 27 # buffer(ブロックの後半をソートした配列)とxの後半とで比較して、小さい方をxの前半に入れる 28 while i < m && j < n do 29 if buffer[i] <= x[j] 30 x[k] = buffer[i] 31 k += 1 32 i += 1 33 else 34 x[k] = x[j] 35 k += 1 36 j += 1 37 end 38 end 39 40 #while i < m do 41 # x[k + t] = buffer [i] 42 # k += 1 43 # i += 1 44 #end 45 46 #p x 47 48end 49# merge_sort メソッド終わり 50 51end 52#Sort モジュール終わり 53 54#配列を生成し、ソートする(main 処理) 55 56#配列の大きさを入力 57puts "Number of index" 58a = gets.to_i 59N = a 60 61# 要素数Nの配列を生成 62sort_array = Array.new(N) 63 64puts "Before sort" 65# 1000以下の乱数を生成し、sort_array配列に格納 66for i in 0..(N - 1) do 67 68 sort_array[i] = Random.rand(1000) 69 print sort_array[i].to_s + ", " 70end 71 72puts "\n" 73 74puts "Sort is started" 75# quick_sort メソッド呼び出し 76Sort.merge_sort(N, sort_array) 77 78puts "Sort ended" 79for i in 0..(N - 1) do 80 print sort_array[i].to_s + ", " 81end 82 83puts "\n"
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/07 10:00
2015/10/07 12:29
2015/10/07 13:32