uycep2ed’s blog

IT関連のニュースで思ったこと感じたこと、プログラミングの勉強の備忘録を書いていきたいと思います。

ruby練習問題での備忘録その2

今回のは、バイナリーサーチメソッドを使ってその数値が配列の中の何番目に存在するかを確かめる方法です。

バイナリーサーチとは?

ソートされたリストや配列の中央値を検索し、それを繰り返していく検索アルゴリズム

コード

今回配列は、

array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

とします。

def binary_search(array, number_of_elements, target)
  left = 0  //配列の一番初めは0番目から
  right = number_of_elements - 1  // number_of_elementsは、後ほど定義します。この変数は、array.lengthででた配列の数を表しています。lengthででた数値は最初が1 
  番目から始まるので、-1をしてあげないといけないことに注意が必要。
  While left <= right
    center = (left + right) / 2  //配列の中央の位置を出す
 if array[center] == target
      return center
   elsif array[center] < target //中央の数値より指定した数値が大きい場合
      left = center + 1
   else            //中央の数より指定した数値が小さい場合
      right = center - 1
 end
  end
  return -1                              //何も当てはまらない場合
end

array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

target = gets.to_i  //知りたい数値を聞く
number_of_elements = array.length //arrayの配列の数を出す

result = binary_search(array, number_of_elements, target)

if result == -1
 puts "存在しません"
else
 puts "#{target}は配列の#{result}番目に存在します "
end

解説として

今回は、While文を使う事で、繰り返し文を使っています。条件式がTrueの間ずっと行われるのでこれにより答えを導いています。探したい数値が見つかった時に、 returnを使ってWhile文を止めています。 理解に苦しみました...汗