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

Почему код работает по-разному?

Есть массив
let attempts = [120, 150, 160, 201, 203, 180, 202];


Есть вот такой код сортировки:
for (let i = 0; i < attempts.length - 1; i++) {
  for (let j = i + 1; j < attempts.length; j++) {
    if (attempts[i] < attempts[j]) {
      let swap = attempts[i];
      attempts[i] = attempts[j];
      attempts[j] = swap;
    }
  }
}


и вот такой код сортировки:
for (let i = 0; i < attempts.length - 1; i++) {
  for (let j = 1; j < attempts.length; j++) {
    if (attempts[i] < attempts[j]) {
      let swap = attempts[i];
      attempts[i] = attempts[j];
      attempts[j] = swap;
    }
  }
}


Отличие одно: в первом случае написано let j = i + 1, а во втором let j = 1

Почему первый код сортирует правильно, а второй — нет? Кажется, что в обоих случаях значения j должны быть 1, 2, 3, 4, 5...
  • Вопрос задан
  • 121 просмотр
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Смысл алгоритма: два указателя, которые двигаются слева направо.
Второй всегда правее первого.
Сравниваются два элемента массива под указателями. Меняются местами при необходимости.

Вот визуализация сортировки:
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
samodum
@samodum
Какой вопрос - такой и ответ
Потому что второй код неправильный.
Если хочешь разобраться почему - дебаггер тебе в руки и вперёд!

P.S. почему 10/2 делится нормально, а 10/0 возникает ошибка? Надо запилить вопрос на тостере
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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