入門者向けのRubyサンプルコード記事です。問題と、解答例となるサンプルコードをセットに公開しています。難しい用語の解説は控えめに、まずは動かしてみたい人向けのコンテンツです。
はじめに
どうもMizokeiです。Ruby超入門シリーズです。本記事の実行環境は以下です。
実行環境
- Windows10 64bit
- Ruby 2.5
問題と解答例をセットに公開
問題と解答例としてサンプルコードをセットに公開します。サンプルコードを、コピペして実行し動作を確認してみましょう。
とりあえず、動かしてみることが目的なので、専門用語などの難しい話は、別途参照書などを御覧ください。
問題
17,34,2,4,6,11,7,3,22の要素を持つ数値のリストについて、ヒープソートを行い、putsを用いて表示せよ。
出力結果
0 1 2 |
[2, 3, 4, 6, 7, 11, 17, 22, 34] |
解答例 サンプルコード
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#数値のリストを定義する default_list = [17,34,2,4,6,11,7,3,22] #ヒープソート (0..default_list.length-1).each do |i| j = i while (j > 0) and (default_list[((j-1)/2).floor] < default_list[j]) do tmp = default_list[((j-1)/2).floor] default_list[((j-1)/2).floor] = default_list[j] default_list[j] = tmp j = ((j-1)/2).floor end end (default_list.length).step(1,-1) do |i| tmp = default_list[i-1] default_list[i-1] = default_list[0] default_list[0] = tmp j = 0 while ((2*j+1<i-1) and (default_list[j] < default_list[2*j+1])) \ or ((2*j+2<i-1) and (default_list[j] < default_list[2*j+2])) do if (2*j+2 == i-1) or (default_list[2*j+1] > default_list[2*j+2]) tmp = default_list[j] default_list[j] = default_list[2*j+1] default_list[2*j+1] = tmp j=2*j+1 else tmp = default_list[j] default_list[j] = default_list[2*j+2] default_list[2*j+2] = tmp j=2*j+2 end end end #ソート済みのリストを表示 puts "#{default_list}" |
関連記事
【Ruby超入門】クラスを作成してみよう
【Ruby超入門】値の交換を実装してみよう
【Ruby超入門】挿入ソートを実装しよう【アルゴリズム】