Тестируем сортировку ПОМОГИТЕ ПОНЯТЬ !!!

Я не понимаю лигики. У мени арифметически виходит што 5 и 4 просто меняютса местами
И почему usersByDay.length - 2 ?? Хелп мі пліз

var usersByDay = [5, 4, 3, 2, 1, 0];
console.log(usersByDay);

for (var i = 0; i <= usersByDay.length - 2; i++) {
  var minValue = usersByDay[i];

  for (var j = i + 1; j <= usersByDay.length - 1; j++) {
    if (usersByDay[j] < minValue) {
      minValue = usersByDay[j];
      console.log(minValue);
      var swap = usersByDay[i];
      usersByDay[i] = minValue;
      usersByDay[j] = swap;
      

    }
    

  }

  console.log('lol');

console.log(usersByDay);
}

есть два цикла:

  1. внешний с i
  2. внутренний с j

внешний проходит до предпоследнего элемента массива
внутренний с текущего + 1 до последнего

1 итерация внешнего цикла:
собственно на любой итерации внешнего цикла запускается и полностью отрабатывается внутренний
т.е.
мы берем 1 элемент массива usersByDay[i], где i = 0 и записываем его значение в буфер minValue.
в ходе работы внутреннего цикла, мы сравниваем, есть ли элемент, который меньше буфера. если находит - то элементы массива меняются местами. таких перестановок может произойти несколько за время работы внутреннего цикла
как итог, на 1 итерации внешнего цикла мы получаем минимальный элемент массива на 1ой позиции. все просто.
соответственно на 2 итерации - второй по минимуму, на 3ей - 3ий по минимуму и т.д.

почему usersByDay.length - 2? т.е. почему до предпоследнего?
потому что мы уже получим выстроенный ряд из элементов, а последний нет смысла сравнивать он и так максимальный, потому что единственный оставшийся. это оптимизация итераций цикла (меньше итераций - выше производительность программы в целом).

5 лайков

Большое спасибо))) очень хорошо объяснил)) сколько лет ты уже учишь js :: ??

немного, полгода где-то. пока не учусь, на работе запара =)

1 лайк

Ти работаеш програмистом ?

нет, не работаю. мне еще до джуна надо чуть-чуть подучиться

1 лайк

а, ну понятно ))

Ответь пожалуйста) как вообще понять что ты джун:?

а вот пойди и устройся работать в вебстудию на позицию джуниора =) если берут, значит ты овладел стеком технологий =)