Сортировка выбором


#22

zateya, Hierumo — спасибо вам огромное!

Теперь я понял, как работает этот код.


#23

У вас тоже работает не так, как должно.
Screenshot_2
У вас двойка заняла первую позицию в массиве, когда сначала должна там появиться единица, как наименьший элемент.
Вот как следует переписать ваш код:


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


#24

:slight_smile: смотрите, мы же обсуждали конкретный код, приведенный @ haosmos, который хотел понять как работает приведенный код.

Конечно, реальная сортировка выбором не меняет каждый раз (это уже даже выше указали), а меняет уже после нахождения минимума, когда прошлись по внутреннему циклу.
Действительно, нет нужды делать промежуточные перестановки до нахождения минимума.

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


#25

Так-то я сам до конца разобрался с решением, только когда исправил код приведенный Кириллом. Так что я больше это себе объяснял :smile:


#26

Вот да, Кирилл сделал отличную работу, т.е. подготовил все что нужно, чтобы сделать правильные выводы и найти оптимальное решение. :+1:


#27

так то для сортировки есть метод для массивов .sort( (a,b) => a - b), он немного иначе работает и дает меньше итераций, если уж интересует самое оптимальное решение (ток его тут не преподают).
также можно было бы во внутреннем цикле сделать старт счетчика не j = i, а j = i + 1, так тоже меньше итераций будет (из того, что учили тут).


#28

Счетчик я так и выставил в исправленном варианте j = i + 1 для внутреннего.
А методы sort использует алгоритм быстрой сортировки, что даже по условию задачи - не подходит. Ну и методы сейчас пока использовать - так себе идея. Нужно хотя бы элементарные алгоритмы разобрать и своими ручками их реализовать на практике.


#29

вот выбирайте себе любой какой хотите =)


#30

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


#31

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


#32

Образование - не суть. Мы в универе изучали основные алгоритмы, но когда этим не пользуешься - оно забывается напрочь. Как и комбинаторика, высшая алгебра и т.д, и т.п. Сейчас смотришь - ну да, знакомо, но по факту практически заново нужно учить.


#34

Прочитала все комменты, почитала про пузырьковую и сортировку выбором (спасибо @zateya и @Hierumo ) - вот у меня в результате возник вопрос к разработчикам курса:

Если в задании четко написано “Напиши сортировку массива выбором.”, почему тогда при написании программы Пузырьковой сортировкой, она проходит проверку?!


#35

Сравнивается результат выполнения, а не реализация, которая к этому результату привела.


#36

Да, всё верно.


#37

Ага, понятно. Тогда еще вопрос: а как новичку понять, что он вообще сделал сортировку выбором? Ну почитал в википедии, но не факт, что понял и сделал правильно. Мог сделать пузырьковую, получить результат проверки правильный и на этом успокоиться)))), и, о ужас, решить, что теперь он владеет сортировкой выбором)))). Я к тому, что человеку, который вообще программирование/алгоритмы в первый раз в глаза видит, это крайне сложно))).


#38

В точку!


#39

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


#40

Ага, т.е. сортируем вот так:

var numbers = [3, 5, 15, 6, 2, 1];
numbers.sort((a, b) => a - b)

а остальное для понимания/знания. Ок, спасибо!