为了让您了解我所尝试的内容:
作为一名教授排序算法的人,我希望能够让学生轻松地可视化他们的排序算法是如何工作的,并且发现生成器非常有用,因为我可以在任何时候中断执行:学生可能编写以下代码,但我的库可以将其转换为动画:
有没有一种方法可以做到这一点?
function* bubbleSort(arr){
let done = false;
while(!done){
done = true;
for(let i=1;i<arr.length;i++){
yield {type:"comparison",indexes:[i-1,i]};
if(arr[i-1]>arr[i]){
yield {type:"swap",indexes:[i-1,i]};
swap(arr,i-1,i);
done = false;
}
}
}
return "sorted";
}
这个方法效果不错,但如果我能编写函数compare(i,j)
和swap(i,j)
来处理yield(在比较的情况下还返回布尔值),会更好。所以我希望能像下面这样表达:
function* bubbleSort(arr){
let done = false;
while(!done){
done = true;
for(let i=1;i<arr.length;i++){
if(compare(i-1,i)){
swap(arr,i-1,i);
done = false;
}
}
}
return "sorted";
}
有没有一种方法可以做到这一点?
compare
返回true;
,就会进入if分支。 - Jonas Wilms