zateya, Hierumo — спасибо вам огромное!
Теперь я понял, как работает этот код.
zateya, Hierumo — спасибо вам огромное!
Теперь я понял, как работает этот код.
У вас тоже работает не так, как должно.
У вас двойка заняла первую позицию в массиве, когда сначала должна там появиться единица, как наименьший элемент.
Вот как следует переписать ваш код:
смотрите, мы же обсуждали конкретный код, приведенный @ haosmos, который хотел понять как работает приведенный код.
Конечно, реальная сортировка выбором не меняет каждый раз (это уже даже выше указали), а меняет уже после нахождения минимума, когда прошлись по внутреннему циклу.
Действительно, нет нужды делать промежуточные перестановки до нахождения минимума.
Но вы молодец, что указали. Потому что обсуждение длинное и можно сразу не понять.
В общем, ваше замечание и решение правильное. Но Кирилл пояснял именно конкретный код. Важно же понять как работает решение, пусть оно даже не оптимальное и содержит лишние шаги.
Так-то я сам до конца разобрался с решением, только когда исправил код приведенный Кириллом. Так что я больше это себе объяснял
Вот да, Кирилл сделал отличную работу, т.е. подготовил все что нужно, чтобы сделать правильные выводы и найти оптимальное решение.
так то для сортировки есть метод для массивов .sort( (a,b) => a - b), он немного иначе работает и дает меньше итераций, если уж интересует самое оптимальное решение (ток его тут не преподают).
также можно было бы во внутреннем цикле сделать старт счетчика не j = i, а j = i + 1, так тоже меньше итераций будет (из того, что учили тут).
Счетчик я так и выставил в исправленном варианте j = i + 1 для внутреннего.
А методы sort использует алгоритм быстрой сортировки, что даже по условию задачи - не подходит. Ну и методы сейчас пока использовать - так себе идея. Нужно хотя бы элементарные алгоритмы разобрать и своими ручками их реализовать на практике.
Вообще, хорошо если академия возьмется визуализировать основные алгоритмы сортировки, хотя бы те что относятся к заданиям. Ну потому что просто текст не очень работает. Надо пояснять и показывать что меняется.
если еще учесть, что на собеседования частенько спрашивают написать алгоритм определенного вида сортировки, то это будет достаточно полезно. многие кандидаты разве что и знают .sort =) или знают сортировку выбором, но не знают что она так называется. ну это из числа тех, что без образования - по самомучителям учатся.
Образование - не суть. Мы в универе изучали основные алгоритмы, но когда этим не пользуешься - оно забывается напрочь. Как и комбинаторика, высшая алгебра и т.д, и т.п. Сейчас смотришь - ну да, знакомо, но по факту практически заново нужно учить.
Прочитала все комменты, почитала про пузырьковую и сортировку выбором (спасибо @zateya и @Hierumo ) - вот у меня в результате возник вопрос к разработчикам курса:
Если в задании четко написано “Напиши сортировку массива выбором.”, почему тогда при написании программы Пузырьковой сортировкой, она проходит проверку?!
Сравнивается результат выполнения, а не реализация, которая к этому результату привела.
Да, всё верно.
Ага, понятно. Тогда еще вопрос: а как новичку понять, что он вообще сделал сортировку выбором? Ну почитал в википедии, но не факт, что понял и сделал правильно. Мог сделать пузырьковую, получить результат проверки правильный и на этом успокоиться)))), и, о ужас, решить, что теперь он владеет сортировкой выбором)))). Я к тому, что человеку, который вообще программирование/алгоритмы в первый раз в глаза видит, это крайне сложно))).
В точку!
эм - никак. на практике никто не сортирует в JS кроме как быстрым методом. JS имеет весьма ограниченный спектр применения (хоть и очень популярный), но например в шифровании (где эти самые разные алгоритмы сортировок используются) JS не применяется.
просто тут это используется, для понимания как происходит сортировка, вот и весь спрос.
Ага, т.е. сортируем вот так:
var numbers = [3, 5, 15, 6, 2, 1];
numbers.sort((a, b) => a - b)
а остальное для понимания/знания. Ок, спасибо!
Получилось что-то такое. Но я не уверена, что это нужное решение…
for(var i = 0; i < numbers.length - 1; i++){ // Берем элементы массива по очереди для сравнения
var minIndex; // Создаем переменную для хранения индекса минимального элемента
var minElement = numbers[i]; // Допускаем, что это минимальный элемент
for(var j = i + 1; j < numbers.length; j++){ // Ищем минимальный элемент из оставшихся
if(numbers[j] < minElement){
minElement = numbers[j];
minIndex = j;
}
}
if(minElement !== numbers[i]){ // Если минимальный элемент не равен изначальному значению, то меняем местами и идем к следующей итерации
var swap = numbers[i];
numbers[i] = minElement;
numbers[minIndex] = swap;
}
console.log(numbers)
}
Поначалу получилось вот так:
for(var i = 0; i < numbers.length; i++){
for(var j = i + 1; j < numbers.length; j++){
if(numbers[j] < numbers[i]){
var swap = numbers[j]
numbers[j] = numbers[i];
numbers[i] = swap;
}
}
}
Но, насколько я поняла, это не сортировка выбором, а пузырьковая сортировка. Ну или поправьте меня, если я не права.
Не читал всю ветку, сделал так, надеюсь правильно понял что именно так надо было делать согласно заданию
var numbers = [3, 5, 15, 6, 2, 1];
for (var j = 0; j < numbers.length; j++) {
for (var i = j + 1; i < numbers.length; i++) {
var little = numbers[j];
var itemStart = numbers[j];
if (numbers[i] < little) {
little = numbers[i];
numbers[j] = little;
numbers[i] = itemStart;
}
}
}