Files
hello-algo/ru/codes/ruby/chapter_searching/binary_search_insertion.rb
Yudong Jin 7a78369e4c Migrate to Zensical (#1869)
* Fix Russian Ruby code extraction.

* Add zensical configs.
2026-03-29 05:41:25 +08:00

69 lines
2.4 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
=begin
File: binary_search_insertion.rb
Created Time: 2024-04-09
Author: Blue Bean (lonnnnnnner@gmail.com)
=end
### Бинарный поиск точки вставки (без повторяющихся элементов) ###
def binary_search_insertion_simple(nums, target)
# Инициализировать двусторонне замкнутый интервал [0, n-1]
i, j = 0, nums.length - 1
while i <= j
# Вычислить индекс середины m
m = (i + j) / 2
if nums[m] < target
i = m + 1 # target находится в интервале [m+1, j]
elsif nums[m] > target
j = m - 1 # target находится в интервале [i, m-1]
else
return m # Найти target и вернуть точку вставки m
end
end
i # target не найден, вернуть точку вставки i
end
### Бинарный поиск точки вставки (с повторяющимися элементами) ###
def binary_search_insertion(nums, target)
# Инициализировать двусторонне замкнутый интервал [0, n-1]
i, j = 0, nums.length - 1
while i <= j
# Вычислить индекс середины m
m = (i + j) / 2
if nums[m] < target
i = m + 1 # target находится в интервале [m+1, j]
elsif nums[m] > target
j = m - 1 # target находится в интервале [i, m-1]
else
j = m - 1 # Первый элемент меньше target находится в интервале [i, m-1]
end
end
i # Вернуть точку вставки i
end
### Driver Code ###
if __FILE__ == $0
# Массив без повторяющихся элементов
nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]
puts "\nМассив nums = #{nums}"
# Бинарный поиск точки вставки
for target in [6, 9]
index = binary_search_insertion_simple(nums, target)
puts "Индекс позиции вставки элемента #{target}: #{index}"
end
# Массив с повторяющимися элементами
nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15]
puts "\nМассив nums = #{nums}"
# Бинарный поиск точки вставки
for target in [2, 6, 20]
index = binary_search_insertion(nums, target)
puts "Индекс позиции вставки элемента #{target}: #{index}"
end
end