Newer
Older
Ruby / qsort.rb
#!/usr/koeki/bin/ruby
# coding: utf-8

def qsort(data)		# 配列を受け取る

  if data.length <= 1	# データが1個以下なら
    data		# そのものを返して並べ換え完了
  else
    left = Array.new	# left(左側配列)を新規作成
    right = Array.new 	# right(右側配列)を新規作成
    k = data.shift	# 変数dataの先頭を取り出してkにする

    for x in data	# 残ったdata全てに対して繰り返す
      if x > k 	   	# kより大きかったら
         left << x	# 左側に追加
      else
         right << x	# 右側に追加
      end
    end			# 繰り返し終わり

    # qsort(left)の末尾にkを足し、さらにqsort(right)を結合
    qsort(left).push(k) + qsort(right)
  end
end

def readNumArray()
  ary = []
  while line=gets		# 入力が続く間
    datum = line.chomp!.to_i	# 整数に直して
    ary.push(datum)		# aryに追加していく
  end
  ary				# 最後にaryを呼び主に返す
end

def printArray(a)
  printf("[%s]\n", a.join(", "))
end

ary = readNumArray()

puts "整列前:"
printArray(ary)
puts "整列後:"
printArray(qsort(ary))