【发布时间】:2020-03-24 12:07:03
【问题描述】:
所以我试图在 Vanilla JS 中可视化排序算法,为此我需要实际的排序函数,而不是在几分之一秒内全部排序,而是等待,例如每次迭代后 250 毫秒。 这是冒泡排序代码(确实有效):
function sortArray(){
let arr = inputArray; //arr is the array to get sorted.
let l = arr.length;
let swapped;
//---Bubble sort---
do {
swapped = false;
for (let i = 0; i < l-1; i++) {
if (arr[i] > arr[i+1]){
let temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
swapped = true;
}
}
}while (swapped);
//---Bubble sort---
display.innerText = JSON.stringify(arr); //Display the sorted Array to the user
}
现在我研究了如何在 JS 中减慢循环,并尝试了几种不同的方法。 例如:
function sortArray(){
let arr = inputArray; //arr is the array to get sorted.
let l = arr.length;
let swapped;
//---Bubble sort---
do {
swapped = false;
for (let i = 0; i < l-1; i++) {
setTimeout(() =>{
if (arr[i] > arr[i+1]){
let temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
swapped = true;
n++;
}
arrayDisplay.innerText =JSON.stringify(arr);
},250 *i);
}
}while (swapped);
//---Bubble sort---
display.innerText = JSON.stringify(arr); //Display the sorted Array to the user
}
在这里,我尝试在 for 循环中使用 setTimeout 函数,该函数在理论上确实有效,但它只会减慢并显示 for 循环的每个步骤,但在每次运行后停止而不是再次循环(while(swapped)) (显然,但我不知道如何解决它)。对于每个while循环,我再次按下按钮。
我还尝试将整个 do-while 构造封装在 setTimeout 中,并在 for 循环中添加一个额外的 set Timeout。那简直让我的浏览器崩溃了。我还尝试了其他几个星座,但这些星座要么导致浏览器崩溃,要么根本没有排序。
【问题讨论】:
标签: javascript loops sorting