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

В тот момент я хотел сделать что-нибудь полезное для других людей. И поэтому я решил объединить эти две цели и сделать репозиторий, который содержит в себе самые распространенные и простые алгоритмы.

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

Содержание моего репозиторчика следующее:

  • структуры данных - сюда я запихал графы, связанные списки, динамические массивы, min и max-кучи и еще что-то, все не помню

  • алгоритмы сортировки - наверно одна из самых излюбленных вещей, здесь вы найдете вашу любимую сортировку пузырьком, а также другие знакомые вам

  • алгоритмы поиска - здесь ничего нового, линейный и двоичный (также я добавил двоичный с рекурсией и реализовал методы для поиска правой или левой границы, почитайте комменты)

  • паттерны проектирования - ну без этого никак :)

Несколько дней назад я добавил мой проект на Reddit и англоязычные прогеры меня попросили перевести на их родной язык и поэтому в исходниках вы увидете два пакета ru и en.

Когда мне было не лень, я добавлял к каждому классу, методу или файлу описание алгоритма или паттерна в виде комментариев.

Про тесты чуть не забыл! Я еще никогда не писал столько тестов. ))

Почти 100%-ая покрываемость, за исключением одного теста, который я не дописал для улучшенной сортировки пузырьком :))

Желаю всем хорошего кода и обязательно загляните в мой репозиторий, возможно у вас есть идея как его улучшить или добавить что-нибудь еще, я открыт к этому и прошу вас пишите конструктивные комментарии)

Ссылка на Github репозиторчик

Комментарии (4)


  1. NChechulin
    29.01.2022 09:10
    +2

    Отправьте сюда PR что-ли


    1. Krasnoarmeec
      29.01.2022 10:03

      Ого! Отличная коллекция! Спасибо Вам большое!


  1. kkarnauk
    29.01.2022 15:09

    Несколько вещей, которые вызвали боль.

    Во-первых, зачем писать Min и Max, когда в котлине у любого Iterable<T : Comparable<T>> можно просто вызвать min и max (с поправками на null)? К тому же у Вас они принимают лист, хотя почти везде в остальных местах используется Array.

    Во-вторых, непонятно, зачем полностью дублировать код, который отличается только в языке комментариев. Как минимум, можно написать оба языка рядом. Но вообще не очень понятна цель писать на русском, ведь все сообщество на GitHub в основном общается на английском. В любом случае, тот факт, что русский -- основной вариант Readme, вообще поражает.

    К тому же, Вы для каждого вида сортировки просто скопировали тесты, хотя их можно было написать в базовом классе, а потом отнаследоваться, это сэкономило бы много времени. А ещё было бы неплохо проверять сортировку на массивах длины большей, чем 10 :)

    И немного о фичах котлина. В нем есть object, который используется для создания синглтонов, и большую часть Ваших классов можно заменить на них. Тогда не нужно будет писать SomeSort().sort(...), можно будет SomeSort.sort(...)


    1. KiberneticWorm Автор
      29.01.2022 15:13

      Спасибо большое! Я сейчас активно улучшаю мой репозиторий.

      1) Я добавил разные алгоритмы в мой репозиториий, также я решил добавить самые простые, такие как min и max

      2) Основной Readme я сделаю на английском. В принципе насчет локализации я сейчас думаю, возможно вообще убрать русский, но я хотел бы и охватить новичков, которые еще плохо знают английский.

      3) Насчет тестов я еще работаю

      4) Я постараюсь сделать алгоритмы более Котлиновскими)