Шаг 51.
Язык программирования Go.
Сортировка и поиск

    На этом шаге рассмотрим примеры сортировки срезов и поиска значений.

    Задание 1. Сравнить результаты сортировки строк библиотечной функцией sort.Strings и пользовательской SortFoldedStrings (рис.1):


Рис.1. Пример работы приложения

Раскрыть/скрыть решение и комментарии.

    Задание 2. Реализовать поиск определенного значения в срезе (рис.2):


Рис.2. Пример работы приложения

Раскрыть/скрыть решение и комментарии.

    Простой линейный поиск пригоден только при работе с несортированными данными и только для небольших срезов (до нескольких сотен элементов). Но для огромных срезов, особенно когда поиск требуется выполнить многократно, линейный алгоритм оказывается весьма неэффективным – для поиска элемента в среднем приходится сравнить с искомым значением половину элементов.

    В языке Go имеется метод sort.Search(), реализующий алгоритм поиска методом половинного деления: для выполнения поиска он требует выполнить не более log2(n) сравнений (где n – количество элементов). Если взглянуть с этой точки зрения, алгоритм линейного поиска по 1 000 000 элементов требует в среднем выполнить 500 000 сравнений и в худшем случае – 1 000 000 сравнений; а алгоритм поиска методом половинного деления потребует выполнить максимум 20 сравнений, даже в самом худшем случае.

    Задание 3. Реализовать поиск значения в срезе методом половтнного деления (рис.3):


Рис.3. Пример работы приложения

Раскрыть/скрыть решение и комментарии.

    На следующем шаге рассмотрим понятие "отображения" в Go.


Предыдущий шаг Содержание Следующий шаг