quicksort のプログラムは次のようになる。 quicksort.rb
#!/usr/koeki/bin/ruby
# 並べかえ部分
def quicksort(number) # number 配列を受け取る
if number.length <= 1 # カードが残り 1 枚以下なら、number は数値が入る
number # 数値そのものを返して並べ換え完了
else
left = Array.new # 左側の山配列 left を新規作成
right = Array.new # 右側の山配列 right を新規作成
k = number.shift # number 配列の先頭を取り出して k に代入
for x in number # 残った number 配列全てに対して繰り返す
if x < k # k より小さかったら
left << x # 左側の山配列 left に追加
else
right << x # 右側の山配列 right に追加
end
end
# quicksort(left) と k と quicksort(right) をくっつけたものが最終結果
quicksort(left) + [k] + quicksort(right)
# kは要素なので[]で括って配列にする
end
end
# 並べるときに関する method
def readNumArray()
array = [] # 並べる時に使う置場を配列 array と考える
while line=gets # 入力が続く間
datum = line.chomp!.to_i # 整数に直して
array.push(datum) # 配列 arrayに追加していく
end
array # 最後にできあがった array を返す
end
# 並べかえ後についての method
def printArray(a)
printf("[%s]\n", a.join(", "))
end
STDERR.puts "カードを記録して下さい(終了は Ctrl-d):"
array = readNumArray()
STDERR.puts "整列前:"
printArray(array)
puts "整列後:"
puts "小さな順に並べました"
printArray(quicksort(array))
構造は次のようになっている。
def quicksort(number) # 定義 1 # 数字を並べ変える方法について end def readNumArray() # 定義 2 # 入力した数値をどのように配列にくっつけるか end def printArray(a) # 定義 3 # 入力した数字を表示する方法について end # 配列を用意 # 入力した数値を表示 # 入れ替えた数値を表示
配列の操作が使われている。動かし方は
% ./quicksort.rb 8 2 1 3 5 4 9 6 7 Ctrl-D 整列前: [6, 2, 3, 5, 7, 9, 8, 1, 4] 整列後: [1, 2, 3, 4, 5, 6, 7, 8, 9]
である。
Madoka Nishimura <madoka@e.koeki-u.ac.jp>