Зачем учить алгоритмы сортировки, если есть уже готовые методы сортировки?

А также зачем учить и зачем в принципе есть много алгоритмов сортировки линейных, если у них всех O(n^2) время выполнения (типа BubbleSort, InsertionSort e.t.c. ), то есть по сути зачем делать одно и то же, разными способами?
  • Вопрос задан
  • 1738 просмотров
Пригласить эксперта
Ответы на вопрос 8
@nrgian
1) Для развития мышления. Работа с алгоритмами сортировок хороший практикум для развития навыков программирования. Плюс это удобно проверяется преподавателем, удобно давать обратную связь при обучении.

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

За более чем 20 лет программирования, действительно, крайне редко сортировал сам, все больше использовал готовые алгоритмы.

Ничуть не жалею, что в свое время изучал алгоритмы сортировок. Это сильно расширяет профессиональный кругозор.
Ответ написан
longclaps
@longclaps
Алгоритмы сортировки - стандартный материал для обучения студентов теме "сложность алгоритмов". Это как диктант - слова и без тебя есть, а научиться писать их всё-таки надо.
Ответ написан
Комментировать
Zoominger
@Zoominger
System Integrator
Чтобы представлять, что там происходит.
Чтобы понимать, что ты делаешь, а не бездумно обезьянничать.
Чтобы реализовать алгоритм в случае, если нет готовой библиотеки.
Чтобы тренировать алгоритмическое мышление.

По поводу же времени - разные алгоритмы оптимальны для разных наборов и типов данных.
Ответ написан
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Если каждый день ездишь по одному и тому же маршруту 12 заасфальтированных километров на Ford Focus, то не обязательно иметь представление о цикле Карно или кинематике редукторов. Но вот если хочешь выиграть ралли "Дакар"...
Ответ написан
Комментировать
@aab137
Иногда бывает нужно отсортировать не просто так, а с каким-нибудь прибабахом, типа или как-то по-особому, или при этом ещё что-то сделать, такое, на пример, на олимпиадном программировании часто встречается, вот там-то готовые методы не прокатят
Ответ написан
Комментировать
tsarevfs
@tsarevfs
C++ developer
Скорее в учебных целях. Это хороший пример алгоритма, в котором нужно разобраться. На практике вы конечно не будете писать это сами. Ну и знать про разные методы полезно, так как они немного отличаются.
Кстати, линейная сложность это O(n). O(n^2) называют квадратичной.
Стандартные сортировки работают за O(n * log(n)). Но часто это оценка не точная а усредненная.
Есть сортировки которые могут работать с данными по кускам, не загружая все в память.
Линейные сортировки бывают, но для этого нужно что-то дополнительно знать про данные. Например сортировка подсчетом хорошо работает на ограниченных наборах (например на массивах цифр 0-9).
Есть еще другие важные свойства типа стабильности. Это когда вы сортируете файлы сначала по дате а потом по типу и в итоге все файлы одного типа остаются упорядоченны по дате.
Ответ написан
Комментировать
Скажу непопулярное тут мнение, но большинству программистов средней руки это вообще не за чем знать. Хотя нет, знать всё-таки хорошо, на собеседование пригодится.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Кратко:
Если в вашем коде используется сортировка любого типа, Вы - плохой программист!
Это означает, что доступ к данным должен осуществляться по их связям (ID+OOP) в хранилище, а не по неотсортированному списку, который нужно отсортировать, а потом выбрать из него.
Сортировка (точнее, выбор позиции) должна быть ТОЛЬКО на этапе создания/добавления нового экземпляра объекта в список/очередь/дерево/etc (т.е., в любую структуру хранилища)!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы