Пузырьковая сортировка - что это в обще такое?!
Как вам новая заставка постов по программированию? По моему вышло очень круто! 😉
Сижу и делаю интерактивные задачки постоянно. Задачки даются тяжко, но обычно я сам справляюсь! Но на днях был момент когда я не смог сам разобраться. Задачку я решил, но не понял ее на 100%. Раз у меня оплачен курс, то решил обратиться к наставнику, что бы он объяснил попонятнее.
Несколько слов о моем наставнике:
Парень является практикующим программистом на JS. Наставником стал из любопытства. Ему интересно узнать, на что сейчас способны новички после курсов.
Когда я ему пытался объяснить, что именно мне непонятно, он выслушав спросил "это пузырьковая сортировка?". Я думал он прикалывается над мной, но оказалось, что правда есть такая штука.
Сейчас попытаюсь вам объяснить, что именно мне было непонятно. Начну с того, что было понятно и методом исключения дойдем до нужного.
Первый цикл
В первом цикле на место [i] (индекса) добавляется число. Первое число на место индекса идет 0, а значит из массива берется значение 812.
В массиве отчет идет не от единицы, а от нуля. Это значит, что распорядок такой:
UserByDay[0] - выдаст значение 812 из массива
UserByDay[1] - выдаст значение 1360 из массива
UserByDay[2] - выдаст значение 657 из массива
UserByDay[3] - выдаст значение 1247 из массива
UserByDay[4] - выдаст значение 165 из массива
UserByDay[число индекса] - значение из массива
Что позволяет утверждать, что переменная minValue и будет равна в первый раз 812.
Второй цикл
Так как сравнивать значение из цикла c самим собой нету надобности, в условии цикла к [i] прописываем '+1'. Теперь если мы на место индекса поставим [j], то отчет начнется не с значения 812 , а с значения 1360.
Условный оператор if внутри второго цикла
Как мне кажется, тут и происходит основная магия! Условие условного оператора (вроде не туфталогия) заставляет UserByDay[j] сравнить с minValue
При первой проверке получаем такие значения:
UserByDay[j] - это UserByDay[1] - это 1360
minValue - это UserByDay[ i] - это 812
Так как первое значение UserByDay[j] больше minValue, значит условие условного оператора не выполнено. Теперь второй цикл повторяет свое действие до тех пор пока не найдет число меньше minValue или пока не закончатся значения в массиве. В нашем случае второй цикл повторяет свое действие еще один раз, теперь на место буквы [j] встает число 2.
Повторное действие второго цикла выдает:
UserByDay[j] - это UserByDay[2] - это 657
Теперь в переменную minValue сохраняется 657, а в переменную swap сохраняется 812. Теперь когда мы сохранили значения из массива в переменные, мы можем на их место вписать значения.
Что к данному моменту мы имеем:
UserByDay [j] - это UserByDay [2]
swap - это 812
UserByDay[ i] - это UserByDay [0]
minValue - это 657
Теперь они в массиве 812 и 657 поменялись местами.
НО! Теперь то, что просто выжило из моего мозга всю влагу до состояния финика!
Мы сделали это все, но второй цикл продолжает искать числа меньше minValue, который теперь равняется 657!
Не забывайте, что данная ситуация осталась без изменений:
minValue - это UserByDay[i] - это UserByDay[0]
Просто теперь, UserByDay[0] - это 657!!
Теперь если второй цикл найдет число меньше чем 657, то он поставит его на место UserByDay[0]! В то же время, на место числа, которое найдет, он поставит 657!
p.s. Сейчас еще раз посмотрел все виды пузырьковой сортировки и моей там не нашел. Велика вероятность, что у указанного у меня в статье нету в обще названия. Если кто шарит, плиз, подскажите является ли это пузырьковой сортировкой или нет.
ХОЙ ХЭЙ ЛА ЛА ЛЭЙ! Каково?! А?!
- Стать программистом в 30 лет на JS №1 - нажмите для перехода на статью