LINUX.ORG.RU

Поиск значений значений больше заданного в массиве


0

1

Есть отсортированный массив чисел, задано некоторое число которое может как присутствовать в массиве так и нет.

Можно ли с помощью двоичного описка определить множество элементов массива которые больше или меньше заданного?

Случай когда элемент есть в массиве - тривиальный ;)

Например надо найти все элементы большие или равные заданному. Двоичный поиск оперирует левой и правой границей поиска.

Так вот,если элемента в массиве нет, то предполагаю что все значения справа от левой граниы поиска будут больше числа которое искали.

И наоборот, если ищем меньшие, то они будут слева от правой границы.

Блин. вроде верно а на практике не получается нифига ;) Не понимаю то ли в коде ошибка, то ли так делать вообще нельзя.

★★★★

>Не понимаю то ли в коде ошибка

щас телепаты подтянутся, может что-нибудь подскажут.

anonymous
()

у тебя есть отсортированный массив. скажем по возрастанию.т.е.

x1<x2<x3<...<xN

тогда если искомое число меньше х1, то его в массиве заведомо нет. очевидно ж. иди учи уроки

marvin_yorke ★★★
()
Ответ на: комментарий от anonymous

Да нафиг телепаты, мне интересно можно ли та bsearch использовать или нет, это ж не мое изобретение ( к сожалению). Если теория верна значит ошибка в коде ;)

OxiD ★★★★
() автор топика
Ответ на: комментарий от marvin_yorke

Э, мальчик ты о чем?

Мне не важно есть оно в массиве или нет, мне нужно получить индекс после которого все значения в массиве больше N.

OxiD ★★★★
() автор топика
Ответ на: комментарий от OxiD

вообещм есть массив - 1,2,3,4,6,8,12,34,98, 123 Надо получить все числа которые больше 7 ;) Вообщем я так понял что бсерч для этого действительно подходит.

OxiD ★★★★
() автор топика
Ответ на: комментарий от OxiD

bsearch из stdlib.h не подходит, так как возвращает NULL, когда элемент не найден.

Собственная реализация бинарного поиска подходит.

nanonymous
()

Плюсовое std::upper_bound вернёт позицию первого элемента стоящего _за_ искомым, в упорядоченной по < последовательности.

nikitos ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.