Задать вопрос
@GoldRt

Как сделать повторение цикла если условие не выполнено?

Добрый день. Решил написать алгоритм который будет выставлять числа в массиве по возрастанию. Он работает, но проблема в том, что он делает 1 проход, а не столько сколько нужно. Была мысль сделать этот цикл функцией и добавить проверку по массиву после чего запускать еще раз при надобности, но если так сделать код получится слишком большой для такой задачи. Изучаю JS всего несколько дней, просьба не кидаться тапками. Хочу научится писать алгоритмы и шевелить мозгами не подсматривая в другие алгоритмы по типу пузырька и т.д. Есть ли способ это сделать без тучи кода?

let a = [9,3,2,5,4,1,6,8,7]; // можете подставить a = [2,1,4,3,5] чтобы убедиться, что все работает
let d = 0;

for (i = 0; i < a.length; i++){
  a[i] > a[i+1] ? (d = a[i+1], a[i+1] = a[i], a[i] = d) : d;
}
console.log(a);
  • Вопрос задан
  • 640 просмотров
Подписаться 1 Простой 11 комментариев
Пригласить эксперта
Ответы на вопрос 4
like-a-boss
@like-a-boss
Признайся,тебяТянетНаКодМужика,ты—программный гей
Хочу научится писать алгоритмы и шевелить мозгами не подсматривая

Чтобы научиться шевелить мозгами, нужно в первую очередь ими буквально шевелить(я намекаю на самостоятельность). Вы же противоречите сами себе: хочу научиться шевелить мозгами, не подсматривая в чужие алгоритмы, пойду-ка я спрошу на тостере!
Напишите функцию и вызывайте её рекурсивно, по мере надобности, это первое, что приходит в голову. Чтобы самостоятельно в голову пришло что-то иное, нужно либо тупо сидеть над одной задачей иррациональное время, либо практиковать(это то слову, к чему я вас склоняю) что угодно. По мере наращивания опыта придут и другие самостоятельные решения.
Ответ написан
@BlackSCORPION
Была мысль сделать этот цикл функцией и добавить проверку по массиву после чего запускать еще раз при надобности


Так и делай. Для этого есть цикл While, будет вызывать твою функцию пока не выполнится условие
Ответ написан
Комментировать
kirbi1996
@kirbi1996
Можешь вызывать рекурсию. То есть функцию внутри самой себя. А вообще эту задачу можно решить с помощью sort. Да и вообще лучше привыкать пробегаться по массиву через мап и не через цикл
Ответ написан
dollar
@dollar
Делай добро и бросай его в воду.
Сложный вопрос на самом деле. Я имею в виду не то, что в заголовке, а что вы хотите по сути. А хотите вы всего и сразу. Но так хотеть нельзя, увы и ах.

Начнём с того, что вы учите язык несколько дней. Пусть вы успели уже поизучать/попрактиковаться 50 часов. Уровень эксперта - это условно 10000 часов. Делим.
Получается, что ваши знания-навыки - это лишь 0.5% от уровня эксперта.
То есть это только начало пути, и не получится просто взять и научиться за 1 вопрос здесь.

Далее, алгоритмы типа пузырька и прочие алгоритмы из учебника - это классика. Эти алгоритмы хорошо изучены, и не вам их заново изобретать. Ну, конечно, возможность у вас есть изобретать эти велосипеды с нуля, но придётся пройти большой путь, никуда не подсматривая. Но зачем? Ради чего? Алгоритмы из учебника лучше смотреть в учебнике и не переживать особо по этому поводу. В грамотной программе обучения вы можете встретить задачки, которые вам преподносятся с нарастающей сложностью, и обычно вчерашний маетриал можно использовать для решения сегодняшней задачи. А вы хотите изучать не структурированно и с наскока, и чтобы получалось легко? Нет, так не бывает.

А вот где можно разгуляться, так это при решении своих специфических задач, которых нет в учебнике. Но и здесь не всё так просто. Те отвечающие, которые здесь дают моментальные ответы, уже имеют приличный опыт за плечами. То есть у них есть уже готовые или почти готовые решения, которые они просто достают из головы. Они уже решали похожие задачки, и разбираются. Если же вы сталкиваетесь с проблемой, с которой никогда не имели дело, то нужно время, чтобы её осмыслить и начать думать. По науке требуется 23 минуты для этого. То есть вы прочитали задачу, её точную формулировку, а потом начинаете думать - и пройдёт где-то 23 минуты, прежде чем начнёт вырисовываться решение. В это время можно ходить, смотреть в окно, заниматься рутинными делами, не мешать мозгу работать (не загружать его ютубом и статейками).

Свои собственные решения - это как раз самое ценное в плане обучения. Это и есть рост. На некоторые архитектурные решения требуется несколько дней.

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

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

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