0
1

More than 3 years have passed since last update.

バイナリーサーチ アウトプット

Last updated at Posted at 2021-03-19

配列に任意の値が存在するかどうか、そして何番目に存在するのか
という問題です。

array=[1,3,5,6,9,10,13,20,26,31]
arrayの中から検索する数字は6です。

出力結果は、”6は配列の4番目に存在します” です。

def binary_search(array, number_of_elements, target)
  left = 0
  right = number_of_elements - 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,3,5,6,9,10,13,20,26,31]

puts "検索したい数字を入力してください"
target = 6
number_of_elements = array.length

result = binary_search(array, number_of_elements, target)
result += 1
if result == -1
  puts "#{target}は配列内に存在しません"
else
  puts "#{target}は配列の#{result}番目に存在します "
end

下記が1回目のループです。

def binary_search(array, number_of_elements, target) #(配列,10(配列の数),6)
  left = 0 #leftは0です。
  right = number_of_elements - 1    # right = 9 (10(配列の数)-1)
  while left <= right          #  0 <= 9
    center = (left + right) / 2     #(0+9)/2=4(配列の番号)
    if array[center] == target       #9(配列の4番目)==6
      return center             
    elsif array[center] < target    # 9 < 6
      left = center + 1 
    else
      right = center - 1         #4(center)-1=3
     end
  end
  return -1                        
end

array=[1,3,5,6,9,10,13,20,26,31]  #配列です。添字は0からカウント

puts "検索したい数字を入力してください"
target = 6(gets.to_i)              #検索する数値
number_of_elements = array.length    #配列の数=10

result = binary_search(array, number_of_elements, target)
result += 1
if result == -1
  puts "#{target}は配列内に存在しません"    
else
  puts "#{target}は配列の#{result}番目に存在します "
end

下記が2回目のループです。

def binary_search(array, number_of_elements, target)
  left = 0
  right = number_of_elements - 1
  while left <= right         #0<=3(1回目ループのright)
    center = (left + right) / 2  #(0+3)/2=1
    if array[center] == target     #3==6
      return center
    elsif array[center] < target   #3<6
      left = center + 1            #1+1=2
    else
      right = center - 1
    end
  end
  return -1 
end

array=[1,3,5,6,9,10,13,20,26,31]

puts "検索したい数字を入力してください"
target = 6
number_of_elements = array.length

result = binary_search(array, number_of_elements, target)
result += 1
if result == -1
  puts "#{target}は配列内に存在しません"
else
  puts "#{target}は配列の#{result}番目に存在します "
end

下記が3回目のループです。

def binary_search(array, number_of_elements, target) 
  left = 0
  right = number_of_elements - 1
  while left <= right           #2(2回目のループleft)<=3
    center = (left + right) / 2      #(2+3)/2=1
    if array[center] == target        #3==6
      return center                    
    elsif array[center] < target      #3<6
      left = center + 1                #2+1=3
    else
      right = center - 1
    end
  end
  return -1 
end

array=[1,3,5,6,9,10,13,20,26,31]

puts "検索したい数字を入力してください"
target = 6
number_of_elements = array.length 

result = binary_search(array, number_of_elements, target)
result += 1     #result(array)を1からカウントに変更 
if result == -1                         
  puts "#{target}は配列内に存在しません"
else
  puts "#{target}は配列の#{result}番目に存在します " 
end

下記が4回目のループです。計算結果が出力されます。

def binary_search(array, number_of_elements, target) 
  left = 0
  right = number_of_elements - 1
  while left <= right           #3(3回目のループleft)<=3
    center = (left + right) / 2      #(3+3)/2=3
    if array[center] == target        #6==6
      return center                    # center=3
    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 = 6
number_of_elements = array.length #配列の数=10

result = binary_search(array, number_of_elements, target) # binary_searchの計算結果=3
result += 1     #result(array)を1からカウントに変更 3 → 4
if result == -1                          #3 == -1
  puts "#{target}は配列内に存在しません"
else
  puts "#{target}は配列の#{result}番目に存在します " #target=6 result=4
end
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1