バイナリーサーチを利用した、配列の何番目に存在するか、又は存在しないことを確認する問題
以下の配列において、
1
|
array=[1,3,5,6,9,10,13,20,26,31,35]
|
任意の値が配列内に存在しない場合は、「値は配列内に存在しません」と表示し、存在する場合は、配列の何番目にあるかを表示してください。
検索はバイナリーサーチ(2分割検索)を使用して行うこと。
私の回答は、
array=[1,3,5,6,9,10,13,20,26,31,35]
def binary_search(array,target)
head = 0
tail = array.length
while head <= tail
center = ((head + tail) / 2).ceil
if array[center] == target
return "配列の#{center+1}番目に存在する"
elsif array[center] < target
head = center + 1
else
tail = center - 1
end
end
return "値は配列内に存在しません"
end
puts "検索したい数字を入力してください"
target = gets.to_i
puts binary_search(array,target)
で正解を出せた。
整数同士の計算なので整数を返すはずなので不要と考えたが、念の為切上げの .ceil を記述。
"配列の#{center+1}番目に存在する"
の部分が理解が出来なかったので今後の課題としたい。
模範回答は、
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 |
def binary_search(array, right, target)
left = 0
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,3,5,6,9,10,13,20,26,31]
puts "検索したい数字を入力してください"
target = gets.to_i
number_of_elements = array.length
result = binary_search(array, number_of_elements, target)
if result == -1
puts "#{target}は配列内に存在しません"
else
puts "#{target}は配列の#{result}番目に存在します "
end
|
と right をいつどこで定義したのか分からないがこういった内容であった。
コードに対する理解を深めなければいけないが、バイナリーサーチについては概ね理解した。