Найти ближайший индекс по разнице с помощью BinarySearch

У меня есть отсортированный массив размером около 500 000 int. В настоящее время я выбираю правильный индекс, беря различия между моим целевым int и всеми элементами, а затем сортирую по минимальной разнице с помощью LINQ (очень неэффективно).

Я хотел бы иметь возможность сделать что-нибудь очень аналогично BinarySearch.

Дано:

Pos Value
0   10
1   20
2   30
4   50
5   60

Если я хочу найти ближайшее значение для значения 24, я бы хотел, чтобы возвращаемый индекс был равен 1.

Дано:

int index = myArray.BinarySearch(values, 24);
if (index < 0)
    index = ~index;

Это возвращает 2, поскольку дает следующий элемент в строке вместо самого близкого. Можно ли написать IComparer, который возвращал бы ближайший индекс?

Приведенные значения:

Value ExpectedReturn
20    1
24    1
25    2
26    2
30    2

Я пытаюсь сделать это как можно быстрее. Все, что я сделал до сих пор в LINQ, не соответствовало тому, что, по моему мнению, может быть достигнуто с помощью хорошо выполненного двоичного поиска. Спасибо за ваш вклад.

9
задан jsmith 29 November 2010 в 17:06
поделиться