Нам нужен цикл while для пузырьковой сортировки.
Если мы удалим while
, мы будем «пузыриться» только один раз по всему массиву. Например, если
[3, 2, 6, 9, 3, 5];
здесь 3 (первый элемент) больше 2 (второй элемент), поэтому мы поменяли их местами, и теперь у нас есть
[2, 3, 6, 9, 3, 5]
Когда мы продолжаем цикл for, мы приближаемся к 3 (6-й элемент), который меньше, поэтому мы заменяем его на 9 (5-й элемент). И продолжайте вперед.
[2, 3, 6, 3, 9, 5]
отсюда мы только пойдем вверх, но мы можем проанализировать ситуацию. Мы можем видеть, что 3 (4-й элемент) меньше, чем 6 (третий элемент), но цикл for находится далеко вперед, поэтому мы не окажемся в ситуации, когда мы поменяем его с большим элементом.
Таким образом, мы должны начать «пузыриться» снова с самого начала, и мы должны делать это, пока все не будет отсортировано. Это произойдет, когда нечего поменять, потому что мы устанавливаем isSorted=false
всякий раз, когда мы меняемся. После сортировки массива мы сделаем последний проход, где проверим каждую соседнюю пару, и если все они отсортированы, обмен не произойдет, и isSorted
будет true
TLDR; нам нужен while
, потому что для «всплытия» может потребоваться несколько проходов через массив.