Сортировка массива от наибольшего к наименьшему

Всем привет.

Объясните, пожалуйста, почему в сортировке каждый элемент сравнивается с максимальным значением, а не с соседним? Я не могу этого понять.

Вот код:

var mas = [4, 24, 44, 65, 10, 100, 1, 44, 88, 98, 2, 124, 5555];

for (var i = 0; i < mas.length; i++) {

    for (var j = i + 1; j < mas.length; j++) {
        if (mas[j] > mas[i]) {
            var swap = mas[i];
            mas[i] = mas[j];
            mas[j] = swap;
        }
    }
}

Допустим, циклы на первой итерации завершились и 4 с 24 поменялись местами. Массив выглядит так = [24, 4, 44, 65, …]. Далее цикл1 на стадии i = 1, т.е. имеет значение 4. Далее начинается цикл2, мы берем j = i +1, (j = 2), т.е. 44. Уловие выполняется: 44 > 4 и далее мы меняем ИХ местами. Получится (только в моей голове) массив [24, 44, 4, …]. На самом деле программа работает исправно и выдает правильный результат, т.е. она сравнивала 44 не с 4, а с 34. Объясните, как так?
Помогите разобраться с логикой программы. Где я ошибаюсь? Надеюсь, что понятно задал вопрос.

программа работает правильно и сравнивает правильно, с максимальным значением.

смотрите, внешний цикл (тот что с i) - он начинается с того, что мы берем 1 позицию (i = 0) и сравниваем внутри внутреннего цикла с каждым членом массива по очереди, начиная со 2 позиции (j = i + 1 = 1). таким образом внутренний цикл отрабатывается и на 1 позицию встает максимальное число, тут это 5555.

далее наступает вторая итерация внешнего цикла, где уже 2 позиция сравнивается с остальными, начиная с 3 позиции (i = 1, j = 2). внутренний цикл снова начинает отрабатываться полностью.

таким образом внутренний цикл проведет [mas.length - 1] итераций * [mas.length] итераций внешнего цикла.

если хотите посмотреть цикл превращений, добавьте после внутреннего цикла внутри внешнего вывод в консоль, так увидите какие превращения идут на каждой итерации внешнего цикла.

Спасибо большое! Теперь стало понятно.