我正在尝试创建一个可视化工具来对整数数组进行排序。我需要在排序的每个迭代之后绘制表示形式,并添加一个延迟,以便它不会立即发生,而仅显示排序后的数组。但是,setTimeout似乎不起作用,它只是显示排序数组的表示形式,而不是在每次迭代之后。该代码在Java脚本中。
function sort(){
var len = arr.length;
for (var i = len-1; i>=0; i--){
for(var j = 1; j<=i; j++){
if(arr[j-1]>arr[j]){
var temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
setTimeout(startDraw, 3000);
}
}
}
}
答案 0 :(得分:0)
您需要了解您在这里做什么。如果您以自己的方式调用setTimeout,则不会达到目的,因为初始循环仍会在不等待setTimeout的情况下完成。因此,您必须:1.中断循环并2.中断之前调用绘图函数
var arr = [5,4,4,6,7,7,21,45,5,7,87,1,3,5,65];
function sort(){
var len = arr.length;
loop1:
for (var i = len-1; i>=0; i--){
loop2:
for(var j = 1; j<=i; j++){
if(arr[j-1]>arr[j]){
var temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
console.log(arr);
setTimeout(sort, 1000);
break loop1;
}
}
}
}
sort();
答案 1 :(得分:0)
尝试使用 let 代替 var 。
function sort(){
let len = arr.length;
for (let i = len-1; i>=0; i--){
for(let j = 1; j<=i; j++){
if(arr[j-1]>arr[j]){
let temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
setTimeout(startDraw, 3000);
}
}
}
}