Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поиск в Array

20K
05 декабря 2008 года
infolex
16 / / 10.05.2007
Здравствуйте! Есть массив типа int. (
 
Код:
int arr=new int[10]
) со значениями
[COLOR="Red"]1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50[/COLOR]
Мне нужно реализовать поиск по значениям, а если такого значения нет в массиве, чтоб возвращал ближайший. Поясняю:
 
Код:
Ищем значение 5 - находим (у него индекс 1)
Ищем значение 1 - находим (у него индекс 0)
Ищем значение 15 - находим (у него индекс 3)
Ищем значение 25 - находим (у него индекс 5)
Ищем значение 40 - находим (у него индекс 8)
Ищем значение 41 - [COLOR="#ff0000"]не находим[/COLOR], возвращаем идекс 8 (значение 40), так как оно ближе всех по значению.
Ищем значение 19 - [COLOR="#ff0000"]не находим[/COLOR], возвращаем идекс 4 (значение 20), так как оно ближе всех по значению.

for и foreach использовать нельзя, потому что массив огромный.
341
05 декабря 2008 года
Der Meister
874 / / 21.12.2007
Массив сортирован? Если да, то можно "вилкой".
288
05 декабря 2008 года
nikitozz
1.2K / / 09.03.2007
Насколько я понял, массив отсортирован. Используйте бинарный поиск.
20K
05 декабря 2008 года
infolex
16 / / 10.05.2007
Массив отсортирован. А можете пример написать?
288
05 декабря 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: infolex
Массив отсортирован. А можете пример написать?



http://ru.wikipedia.org/wiki/Двоичный_поиск
http://www.languagec.info/bin_poisk.php
http://www.realcoding.net/article/view/1218

341
05 декабря 2008 года
Der Meister
874 / / 21.12.2007
Язык какой?
В C# уже готовое есть: Array.BinarySearch()
20K
05 декабря 2008 года
infolex
16 / / 10.05.2007
Der Meister, Язык C#.
20K
05 декабря 2008 года
infolex
16 / / 10.05.2007
Цитата: Der Meister
Язык какой?
В C# уже готовое есть: Array.BinarySearch()


Разобрался. Спасибо:) только не пойму для чего нужен BinarySearch<>

341
05 декабря 2008 года
Der Meister
874 / / 21.12.2007
Так и писали бы int[] arr...
С возвращаемым значением нужно поплясать: если элемент не найден, то index < 0 -> index = ~index и смотрите, какое значение ближе: arr[index] или arr[index - 1] (index <= arr.Length в этом случае).
341
05 декабря 2008 года
Der Meister
874 / / 21.12.2007
Для предотвращения боксинга/анбоксинга: BinarySearch<int> обращается к IComparable<int>-составляющей типа, а не к IComparable. Да и вообще, явная типизация всегда лучше, чем приведение объекта к object, ибо может быть верифицирована на этапе компиляции.
20K
05 декабря 2008 года
infolex
16 / / 10.05.2007
Я уже все это сделал. Уже разобрался как он индексы возвращает, и с границами массива тоже разобрался.:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог