0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 4
1

Простая Задачка с массивом

22.05.2018, 10:00. Показов 1642. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Решил данную задачку, но в ответе написали, что я не использую тот факт, что массив отсортирован, и получается не оптимально.

Помогите разобраться с примером.
Есть отсортированный по возрастанию массив из 1000 элементов. Есть число, которое точно есть в этом массиве. Выведите на экран его порядковый номер.
  • Не используйте готовый функций поиска, напишите код.
  • Ваш код должен использовать то, что массив уже отсортирован, и быть по возможности оптимальным.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2018, 10:00
Ответы с готовыми решениями:

Простая авторизация на php и mysql, очень простая!
В базе данных таблица с двумя строками: id, user, password. На странице есть два поля для ввода...

Задачка с массивом и задачка с формулами Ньютона и Лагранжа
Прошу помочь решить две задачи

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

Простая задачка
Хотя может задачка и не такая простая. В чём суть. Есть библиотека игрового сервера, там файл...

4
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
22.05.2018, 10:10 2
Код, написанный Вами, покажите.
0
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
22.05.2018, 10:27 3
Подозреваю что там перебор всех элементов. Попробуйте реализовать бинарный поиск.
2
0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 4
22.05.2018, 11:35  [ТС] 4
PHP
1
2
3
4
foreach($array as $key=>$item)
    if($item === $needle){
        print $key; break;
    }
0
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
22.05.2018, 13:17 5
Лучший ответ Сообщение было отмечено Lex Backer как решение

Решение

Бинарный поиск:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function array_find(array $haystack, $needle)
{
    if (!$haystack) {
        return;
    }
    
    $offset = 0;
    $end    = count($haystack) - 1;
    
    while ($offset < $end) {
        $middle = $offset + (($end - $offset) >> 1);
        
        if ($haystack[$middle] >= $needle) {
            $end = $middle;
        } else {
            $offset = $middle + 1;
        }
    }
    
    if ($haystack[$end] === $needle) {
        return $end;
    }
}
Добавлено через 1 минуту
На малом кол-ве элементов в массиве работает медленнее, чем простой перебор. На большом кол-ве в десятки раз быстрее.
1
22.05.2018, 13:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2018, 13:17
Помогаю со студенческими работами здесь

Простая задачка
data Figura = Okr Int | Pryamoygolnik Int Int | Treygolnik Int Int Int plot Figura (Figura...

Простая задачка
Здрасте, заранее извиняюсь если создал не в той теме просто в джава вообще 0. Помогите решить...

Простая задачка
Здравствуйте. Есть вот такая задачка: Написать программу на С пораждающая в цикле следующюю...

не простая задачка
как найти корень квадратного уравнения у минус 2 ПСЧ ?????


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru