начиная с алгоритма SORTING, который я нашел на этом сайте (это действительно круто, он позволяет вам визуализировать алгоритмы во время их работы ..), я хотел перевести их код [и я не уверен, на каком языке ..] на Javascript и примените его к массиву чисел для сортировки.
После многих попыток я все еще не разобрался, и мой код не предоставляет отсортированный массив.
if, внутри цикла for, внутри цикла do-while... возможно ли это в Javascript? Мне кажется, что оператор if else в do while (см. мой фактический код) может заменить for.Спасибо!
Код VisuAlgo (https://visualgo.net/ru/сортировка):
do
swapped = false
for i = 1 to indexOfLastUnsortedElement-1
if leftElement > rightElement
swap(leftElement, rightElement)
swapped = true
while swapped
Мой код:
function swap(element1, element2) {
var t = element1;
element1 = element2;
element2 = t;
return [element1, element2];
};
var startArray = [2, 1, 0, 5, 1];
var swapped = true;
do {
for (i = 0; i < startArray.length; i++) {
if (startArray[i] > startArray[i+1]) {
swap(startArray[i], (startArray[i]+1));
console.info(startArray);
i++;
} else {
swapped = false;
}
}
}
while (swapped);
console.info(startArray);



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Есть пара проблем с вашим кодом.
swap(startArray[i], (startArray[i]+1));
очевидно неверно. Вы, вероятно, имели в виду
swap(startArray[i], startArray[i+1]);
Но я не понимаю, как использовать ваш код подкачки. Что вы делаете со значениями, которые возвращает эта функция?
Вероятно, лучший код был бы
[startArray[i], startArray[i+1]] = swap(startArray[i],startArray[i+1]));
Вы также можете сделать то же самое более компактным способом.
startArray[i]=[startArray[i+1], startArray[i+1]= startArray[i]][0];
Я не тестировал код, но он должен работать.
И если ваши массивы большие, предпочтите сортировку вставками, а не пузырьковую сортировку. Как правило, это быстрее и проще в реализации.
Окончательный код:
function swap(element1, element2) {
var t = element1;
element1 = element2;
element2 = t;
return [element1, element2];
};
var startArray = [2, 1, 9, 5, 1, 4,7, 457, 653, 43, 3];
var swapped = true;
do {
for (i = 0; i < startArray.length; i++) {
if (startArray[i] > startArray[i+1]) {
[startArray[i], startArray[i+1]] = swap(startArray[i],startArray[i+1]);
console.info(startArray);
i = 0;
} else {
swapped = false;
}
}
}
while (swapped);
console.info(startArray);
спасибо @Ален Мериго; добавил 2 упомянутых вами изменения, результат улучшился, но все же я получил только частичную сортировку. Я снял i = 1 в цикле for и изменил его на i = 0, и все сработало правильно. Я включил окончательный код ниже для будущих читателей.