2013-02-14
『アルゴリズムとデータ構造』学習ノート:バイナリサーチ
書籍にはJavaで書かれていたのでrubyでバイナリサーチを実装しなおしてみた。
# -*- coding: utf-8 -*-
# numbersは昇順にソート済みであることを前提とする
def binary_search(target, numbers)
left = 0 # 左端
right = numbers.length - 1 # 右端
center = nil # 中央値
while left <= right do
center = (left + right) / 2
puts center
# 中央の値が検索対象であった場合
if numbers[center] == target
return center
end
if numbers[center] < target
# centerの値よりも大きい => centerより後(右)を探す
# leftの値をcenter+1とし、検索対象を絞り込む
left = center + 1
else
# centerの値よりも小さい => centerより前(左)を探す
# rightの値をcenter-1とし、検索対象を絞り込む
right = center - 1
end
end
# 見つからなかった場合
return -1
end
# 乱数を格納する配列を生成
numbers = []
20.times { numbers << rand(100) }
# 配列のソート
numbers.sort!
# 配列の出力
j = 0
numbers.each do |number|
puts "#{j} : #{number}"
j = j + 1
end
# 検索対象の問いかけ
puts "What do you search for?"
# コマンドラインからの入力の受け取り
target = STDIN.gets.chomp
#target = target.chomp
# バイナリサーチの実行
search_result = binary_search(target.to_i, numbers)
# 検索結果の出力
if search_result == -1
puts "Could not found anything that matches \"#{target}\""
else
puts "#{target} is found at #{search_result}"
end
<< 前の記事『アルゴリズムとデータ構造』学習ノート:リニアサーチ
次の記事 >>【Git】リモートブランチ・ローカルブランチの削除方法